【04】Mybatis笔记–增删改查
步骤:
- 创建与表对应的实体类
- 创建Dao接口
- 准备与Dao接口对应的映射配置xml文件
- 在主配置文件里面使用标签指向映射配置文件
<!-- SqlMapConfig.xml -->
<!-- 配置mappers-->
<mappers>
<mapper resource="indi/xu/dao/UserDao.xml"></mapper>
<mapper resource="indi/xu/dao/AccountDao.xml"></mapper>
</mappers>
一、实体类:User
package indi.xu.domain;
import java.util.Date;
/**
* @author a_apple
* @create 2020-02-05 10:33
*/
public class User {
private Integer id;
private String username;
private String address;
private String sex;
private Date birthday;
//getter(),setter(),toString()...
}
二、UserDao
接口
/**
* @author a_apple
* @create 2020-02-05 10:35
*/
public interface UserDao {
/**
* 查询所有
*/
List<User> list();
/**
* 添加用户
*/
void add(User user);
/**
* 更新用户
*/
void updateUser(User user);
/**
* 根据id删除
*/
void deleteUser(Integer id);
/**
* 查询用户根据id
*/
User get(Integer id);
/**
* 模糊查询
*/
List<User> findByUserName(String username);
/**
* 查询总记录数
*/
Integer total();
/**
* 根据查询条件查询
*/
List<User> findByCondition(QueryCd qc);
}
三、映射配置文件UserDao.xml
①查询所有用户:
<!-- 查询所有-->
<select id="list" resultType="indi.xu.domain.User">
SELECT * from user;
</select>
②添加用户:
注意:
- add(User user): parameterType指的是传入的参数类型
- 使用#{},获取属性字段。(以前使用用?的,现在用#{}替代)
- 如何获取插入对象的id
- 使用
<selectKey>
标签
- 使用
<!-- 添加用户 -->
<insert id="add" parameterType="indi.xu.domain.User">
<!-- 获取插入数据的id
keyProperty:对应实体类的属性名称
keyColumn:对应表字段名称
-->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday})
</insert>
③更新对象
<!--更新-->
<update id="updateUser" parameterType="indi.xu.domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id = #{id}
</update>
④删除用户
<!--删除-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{uid}
</delete>
⑤查询一个用户( 根据id )
<!--查询一个-->
<select id="get" parameterType="Integer" resultType="indi.xu.domain.User">
select * from user where id = #{id}
</select>
⑥模糊查询(根据姓名模糊查询
- “
#{}
”:采用的是PreparedStatement(预处理可有效防止sql注入 - “
${}
”:采用的是Statement (字符串拼接的方式
<!--模糊查询-->
<select id="findByUserName" parameterType="String" resultType="indi.xu.domain.User">
select * from user where username like #{username};
<!-- select * from user where username like '%${value}%' 采用Statement,上面一种是使用PreparedStatement-->
</select>
⑦聚合查询:查询总记录数
<!--聚合查询-->
<select id="total" resultType="Integer">
select count(*) from user;
</select>
⑧根据自定义条件对象查询
注:
- QueryCd是条件对象,里面有一个User对象,不能直接写#{username},得通过"
user.username
"的方式获取
<select id="findByCondition" parameterType="indi.xu.domain.QueryCd" resultType="indi.xu.domain.User">
<!-- 根据查询条件对象进行模糊查询-->
select * from user where username like #{user.username};
</select>
⑨UserDao.xml
<?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="indi.xu.dao.UserDao">
...
<-- 上面的配置的<select>标签 -->
</mapper>