MyBatis高级
注解开发
- 除了用映射配置文件来操作外,我们还可以通过注解的形式来操作
- 常用注解:
- @Select(“查询的sql语句”):执行查询数据操作的注解
- @Insert(“新增的sql语句”):执行新增数据操作的注解
- @Update(“修改的sql语句”):执行修改数据操作的注解
- @Delete(“删除的sql语句”):执行删除数据操作的注解
- @Param:给映射器方法中的每个参数来取一个名字
对比配置文件方式的不同
-
sql编写的位置不同
-
核心配置文件如何加载mapper的
-
使用mapper配置文件加载的方式
<mappers> <mapper resource="com/mybatis/one_to_one/OneToOneMapper.xml"/> <mapper resource="com/mybatis/one_to_many/OneToManyMapper.xml"/> <mapper resource="com/mybatis/many_to_many/ManyToManyMapper.xml"/> </mappers>
-
加载接口的方式
<mappers> <package name="com.mybatis.mapper"/> </mappers>
-
注解开发注意事项
-
@Results的大括号是写在括号内的
@Results({})
-
@Result中的属性是不区分先后顺序的
-
Result里面可以使用的column字段是查询结果集中的字段
-
@One中的select中指定的方法如果有参数那么参数的来源是查询的结果的字段
//查询全部省份证 @Select("SELECT * FROM card") @Results({ @Result(column = "id",property = "id"), @Result(column = "number",property = "number"), @Result( javaType = Person.class, // 被包含对象的实际数据类型 property = "p", // 被包含对象的变量名 column = "pid", // 根据查询出的card表中的pid字段来查询person表 /* one、@One 一对一固定写法 select属性:指定调用哪个接口中的哪个方法 */ one = @One(select = "com.mybatis.one_to_one.PersonMapper.selectById") ) }) public abstract List<Card> selectAll();
搭建sql语句
-
我们之前通过注解开发时,相关sql语句都是直接拼写的。一些关键字写起来比较麻烦,并且容易出错
-
MyBatis给我们提供了org.apache.ibatis.jdbc.SQL功能类,专门用于构建sql语句
方法名 说明 SELECT(String …column) 根据字段拼接查询语句 FROM(String…table) 根据表名拼接语句 WHERE(String…condition) 根据条件拼接语句 INSERT_INTO(String table) 根据表名拼接新增语句 VALUES(String column,String values) 根据字段和值拼接插入数据语句 UPDATE(String table) 根据表名拼接修改语句 DELETE_FROM(String table) 根据表名拼接删除语句 … … … … import org.apache.ibatis.jdbc.SQL; public class SqlTest { public static void main(String[] args) { String sql = getSql(); System.out.println(sql); } //定义方法,获取查询student表的sql语句 /*public static String getSql() { String sql = "SELECT * FROM student"; return sql; }*/ public static String getSql() { String sql = new SQL(){ { SELECT("*"); FROM("student"); } }.toString(); return sql; } }