Mybatis实现CRUD操作
文章目录
1、映射器
映射器(Mapper)是 MyBatis 最复杂、最重要的核心组件,它由一个接口加上 XML 文件(或者注解) 组成。在映射器中可以配置参数、各类的 SQL 语句、存储过程、缓存、级联等复杂的内容,并且通过简易的映射规则映射到指定的 POJO 或者其他对象上。
在映射器的xml文件,我们需要进行大量的配置,可以完成大部分的功能:如写SQL语句实现增删查改,进行一对多、多对多的配置,进行实体类和数据库表的映射等等。
映射器的xml文件中主要包括如下几个标签:
- select :查询语旬,可以自定义参数,返回结果集等
- insert :插入语句,执行后返回成功个数
- update:更新语句,执行后返回成功个数
- delete:删除语句,执行后返回成功个数
- sql:定义部分SQL语句片段,可以在后面引用它
- resultMap:提供映射规则,拥有强大的功能
- cache :给定命名空间的缓存配置
- cache-ref :其他命名空间缓存配置的引用
2、insert
2.1、属性
2.2、简单应用
parameterType属性传递的是一个JavaBean类,插入SQL的#{ }里面的字段必须是该Javabean类的属性。
<!-- 保存用户 -->
<insert id="saveUser" parameterType="User">
insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
</insert>
2.3、主键回填
我们通常对数据库表中的主键设置为自动增长或者自动生成UUID等方式,如果想要获取ID值就需要设置主键回填。
主键回填有两种方式:
第一种是设置useGeneratedKeys为true,还有说明下主键是哪个属性
<!-- 保存用户 -->
<insert id="saveUser" useGeneratedKeys="true" parameterType="user" keyProperty="id">
insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
</insert>
第二种是使用last_insert_id函数
<!-- 保存用户 -->
<insert id="saveUser" parameterType="user">
<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>
测试代码:
@Test
// 保存用户
public void Test2(){
User user = new User();
user.setSex("男");
user.setUsername("小明");
user.setAddress("揭阳");
user.setBirthday(new Date());
System.out.println("保存数据库前的user:" + user);
userDao.saveUser(user);
session.commit();
System.out.println("保存数据库后的user:" + user);
}
结果输出:
3、update和delete
因为update和delete与insert都属于DML,所以update和delete的属性和insert差不多。
3.1、update简单应用
<!-- 更新用户 -->
<update id="updateUser" parameterType="user">
update user set username=#{username},address=#{address},sex=#{sex}, birthday=#{birthday} where id=#{id}
</update>
3.2、delete简单应用
<!-- 删除用户-->
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
4、selete语句
4.1、属性
4.2、应用一
因为select是查询语句,输出必不可少。所以最简单的就是没有参数,只有resultType
<!--配置查询所有-->
<select id="findAll" resultType="user">
select * from user
</select>
4.3、应用二
根据id查询用户,需要参数id和输出user
<!-- 根据id查询用户 -->
<select id="findById" parameterType="Integer" resultType="user">
select * from user where id = #{id}
</select>
4.4、应用三
<!-- 根据名称模糊查询 -->
<select id="findByName" parameterType="string" resultType="user">
select * from user where username like #{name}
<!-- select * from user where username like '%${value}%'-->
</select>
4.5、应用四
使用聚合函数
<!-- 获取用户的总记录条数 -->
<select id="findTotal" resultType="int">
select count(*) from user;
</select>
4.6、应用五
如果查询是多个条件的,则需要将所有条件封装到一个Javabean类中。这里我们定义一个Javabean类QueryVo,它有一个属性是user。
<!-- 根据queryVo的条件查询用户-->
<select id="findUserByVo" parameterType="QueryVo" resultType="user">
select * from user where username like #{user.username}
</select>
4.7、应用六
当实体类的属性和数据库的字段不一致时,我们需要使用resultMap实现映射
映射内容为:其中property为实体类的属性,column为数据库表的字段
<!-- 配置 查询结果的列名和实体类的属性名的对应关系 -->
<resultMap id="userMap" type="user">
<!-- 主键字段的对应 -->
<id property="id" column="id"></id>
<!--非主键字段的对应-->
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
</resultMap>
有错误的地方敬请指出,欢迎大家评论区或者私信交流!每日持续更新Java、Python、大数据技术,请大家多多关注!
上一篇: mybatis注解——CRUD
下一篇: 解决maven依赖冲突方法