简介
在本章开始之前,先导入章节一中的入门项目,创建好数据库并导入数据,具体sql文件在项目地址中。
深入MyBatis源码之前,需要做的就是要了解MyBatis 是怎样使用的,带着使用过程中出现的问题再到源码中学习了解,会比单纯看源码深刻些。 下面开始了解MyBatis 的日常使用。
对于MyBatis 的使用,这里采用学生管理系统来简单演示MyBatis 的用法和解决使用过程中的问题。
一、select、insert, update 和 delete的映射标签使用
1.1 查询学生列表
Mapper接口
public interface StudentMapper {List<Student> list();}
映射文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.hdj.mybatis.example.dao.StudentMapper"><!--resultType 结果集映射类型注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。--><select id="list" resultType="cn.hdj.mybatis.example.entity.Student">select * from student</select></mapper>
1.2 添加学生
Mapper接口
public interface StudentMapper {//添加学生int addStudent(Student student);//批量添加学生int addStudentBatch(List<Student> students);}
映射文件 ```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">
<!--
将会传入这条语句的参数的类全限定名或别名。 这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。
推荐写上
{} :
- 使用 #{} 参数语法时,MyBatis 会创建 PreparedStatement 参数占位符
- 并通过占位符安全地设置参数(就像使用 ? 一样)。
- 这样做更安全,更迅速,通常也是首选做法
如果要获取内嵌对象属性,使用链式调用,如: obj1.obj2Name.properties
—>
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (#{sno},#{sname},#{ssex},#{sbirthday},#{sclass});
<insert id="addStudentBatch" parameterType="cn.hdj.mybatis.example.entity.Student">INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS)VALUES<foreach item="item" collection="list" separator=",">(#{item.sno}, #{item.sname}, #{item.ssex}, #{item.sbirthday},#{item.sclass})</foreach></insert>
<a name="nZrA4"></a>#### 1.3 更新学生- 接口```javapublic interface StudentMapper {//更新学生int updateStudent(Student student);}
- 映射文件
<update id="updateStudentById" parameterType="cn.hdj.mybatis.example.entity.Student">update STUDENTsetSNAME = #{sname},SSEX = #{ssex},SBIRTHDAY = #{sbirthday},SCLASS = #{sclass}where SNO = #{sno}</update>
疑问:
项目地址
https://github.com/h-dj/Mybatis-Learning
