0
点赞
收藏
分享

微信扫一扫

【MyBatis】MyBatis的CRUD操作扩充



文章目录

  • ​​一、实现一个用户查询​​
  • ​​1.修改IUserDao.xml​​
  • ​​2.IUserDao持久层​​
  • ​​3.测试类​​
  • ​​二、实现模糊查询​​
  • ​​1.修改IUserDao.xml​​
  • ​​2.IUserDao持久层​​
  • ​​3.测试类​​
  • ​​三、实现聚合函数查询​​
  • ​​1.修改IUserDao.xml​​
  • ​​2.IUserDao持久层​​
  • ​​3.测试类​​
  • ​​四、补充​​
  • ​​1.匹配符​​
  • ​​2.插入操作 — 获取id​​

紧接着上一篇的内容,进行MyBatis的CRUD操作扩充:MyBatis的CRUD操作

一、实现一个用户查询

1.修改IUserDao.xml

1.查询单个记录的sql语句:select * from user where 字段 = ?;

2.注意where的条件没有明确的约束,可以是唯一值,也可以是多值。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyx.core.dao.IUserDao" >
<!-- 通过id查询一个用户 指明参数类型;指明结果封装类型 -->
<select id="findById" parameterType="java.lang.Integer" resultType="com.zyx.core.domain.User">
select * from user where id=#{id};
</select>
</mapper>

2.IUserDao持久层

package com.zyx.core.dao;

import com.zyx.core.domain.User;
import java.util.List;

/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 查询一个用户信息
* @param id
* @return
*/
User findById(Integer id);
}

3.测试类

【MyBatis】MyBatis的CRUD操作扩充_java

@Test
public void test_findById() {
try {
// 查询单个用户
User user = iUserDao.findById(48);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}

【MyBatis】MyBatis的CRUD操作扩充_CRUD_02

​​返回顶部​​

二、实现模糊查询

1.修改IUserDao.xml

1.模糊查询的sql语句:select * from user where 字段xxx like xxx;

2.注意在模糊查询的时候,我们的模糊符号查询体现在传入的参数中!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyx.core.dao.IUserDao" >
<!-- 根据名称进行模糊查询 -->
<select id="findByName" parameterType="java.lang.String" resultType="com.zyx.core.domain.User">
select * from user where username like #{name} ;
</select>
</mapper>

2.IUserDao持久层

package com.zyx.core.dao;

import com.zyx.core.domain.User;
import java.util.List;

/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 根据名称模糊查询
* @param name
* @return
*/
List<User> findByName(String name);
}

3.测试类

【MyBatis】MyBatis的CRUD操作扩充_mybatis_03

@Test
public void test_findByName() {
try {
// 模糊查询
List<User> userList = iUserDao.findByName("小%");
for (User user:userList){
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}

【MyBatis】MyBatis的CRUD操作扩充_java_04

​​返回顶部​​

三、实现聚合函数查询

1.修改IUserDao.xml

1.聚合函数查询的sql语句:select 聚合函数(字段参数) from user ;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyx.core.dao.IUserDao" >
<!-- 聚合函数查询总数 -->
<select id="findByName" resultType="java.lang.Integer">
select count(id) from user;
</select>
</mapper>

2.IUserDao持久层

package com.zyx.core.dao;

import com.zyx.core.domain.User;
import java.util.List;

/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 聚合函数查询总数
* @return
*/
int findTotal();
}

3.测试类

【MyBatis】MyBatis的CRUD操作扩充_mybatis_03

@Test
public void test_findTotal() {
try {
// 聚合函數查询
Integer count = iUserDao.findTotal();
System.out.println("共有记录"+count+"条!");
} catch (Exception e) {
e.printStackTrace();
}
}

【MyBatis】MyBatis的CRUD操作扩充_CRUD_06

​​返回顶部​​

四、补充

1.匹配符

<!-- 根据名称进行模糊查询 -->
<select id="findByName" parameterType="java.lang.String" resultType="com.zyx.core.domain.User">
select * from user where username like #{name} ;
</select>

<!-- 写法同上 -->
<select id="findByName" parameterType="java.lang.String" resultType="com.zyx.core.domain.User">
select * from user where username like '%${value}%' ;
</select>

内部对其做了具体的处理,只需要记住中间的参数写value即可,后面的参数在传递的时候就不需要写匹配符了~

【MyBatis】MyBatis的CRUD操作扩充_java_07

@Test
public void test_findByName() {
try {
// 模糊查询
List<User> userList = iUserDao.findByName("小");
for (User user:userList){
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}

【MyBatis】MyBatis的CRUD操作扩充_xml_08


注意区别:

【MyBatis】MyBatis的CRUD操作扩充_CRUD_09


对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.

JDBC 中preparedStatement和Statement区别

​​返回顶部​​

2.插入操作 — 获取id

【MyBatis】MyBatis的CRUD操作扩充_CRUD_10


可以看到在基本的操作时,由于id字段是自动增长类型,所以没有使用到id字段,那么我们可以去获取到插入数据时的id吗?

按照一般的方法,我们可以使用 select last_insert_id(); 获取每一次插入数据的id,必须每次有数据的插入,否则结果为0,因为当前没有插入数据!

在插入数据后,该结果就是当前插入数据在表中的id次序,如下图:

【MyBatis】MyBatis的CRUD操作扩充_java_11


同样的,我们也可以在MyBatis中进行配置,来实现插入数据的id查询功能!!!

<!-- 保存用户 -->
<insert id="saveUser" parameterType="com.zyx.core.domain.User">
insert into user(id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address});
<!-- keyProperty代表要返回的值名称,keyColumn代表数据库对应的字段名; order值AFTER代表插入后的行为,resultType代表返回值的类型 -->
<selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="java.lang.Integer">
select last_insert_id();
</selectKey>
</insert>

@Test
public void test_saveUser() {
try {
// 1.执行查询所有方法
String str = "2018-03-11 12:45:00";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
User user = new User();
user.setId(51);
user.setUsername("Mary");
user.setAddress("北京");
user.setSex("女");
user.setBirthday(simpleDateFormat.parse(str));
System.out.println("插入之前:"+user);
iUserDao.saveUser(user);
System.out.println("插入之后:"+user);
// 提交事务
//sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
}
}

在沒有添加selectKey的時候,尽管数据库中的表已经自增,但是输出结果的时候并没有,如下图:

【MyBatis】MyBatis的CRUD操作扩充_CRUD_12


可以发现,添加了selectKey后在插入操作执行前后id值有明显的变化。

【MyBatis】MyBatis的CRUD操作扩充_CRUD_13

​​返回顶部​​


举报

相关推荐

0 条评论