文章目录
- 一、实现一个用户查询
- 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.测试类
@Test
public void test_findById() {
try {
// 查询单个用户
User user = iUserDao.findById(48);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
返回顶部
二、实现模糊查询
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.测试类
@Test
public void test_findByName() {
try {
// 模糊查询
List<User> userList = iUserDao.findByName("小%");
for (User user:userList){
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}
返回顶部
三、实现聚合函数查询
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.测试类
@Test
public void test_findTotal() {
try {
// 聚合函數查询
Integer count = iUserDao.findTotal();
System.out.println("共有记录"+count+"条!");
} catch (Exception e) {
e.printStackTrace();
}
}
返回顶部
四、补充
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即可,后面的参数在传递的时候就不需要写匹配符了~
@Test
public void test_findByName() {
try {
// 模糊查询
List<User> userList = iUserDao.findByName("小");
for (User user:userList){
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}
注意区别:
对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.
JDBC 中preparedStatement和Statement区别
返回顶部
2.插入操作 — 获取id
可以看到在基本的操作时,由于id字段是自动增长类型,所以没有使用到id字段,那么我们可以去获取到插入数据时的id吗?
按照一般的方法,我们可以使用 select last_insert_id(); 获取每一次插入数据的id,必须每次有数据的插入,否则结果为0,因为当前没有插入数据!
在插入数据后,该结果就是当前插入数据在表中的id次序,如下图:
同样的,我们也可以在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的時候,尽管数据库中的表已经自增,但是输出结果的时候并没有,如下图:
可以发现,添加了selectKey后在插入操作执行前后id值有明显的变化。
返回顶部