构建sql:
- 之前通过注解开发时,相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。
- MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句
常用方法:
查询功能的实现:
- @SelectProvider:生成查询用的 SQL语句注解
- type 属性:生成 SQL 语句功能类对象
- method 属性:指定调用方法
新增功能的实现:
- @InsertProvider:生成新增用的 SQL 语句注解。
- type 属性:生成 SQL 语句功能类对象
- method 属性:指定调用方法
修改功能的实现:
- @UpdateProvider:生成修改用的 SQL 语句注解。
- type 属性:生成 SQL 语句功能类对象
- method 属性:指定调用方法
删除功能的实现:
- @DeleteProvider:生成删除用的 SQL 语句注解
- type 属性:生成 SQL 语句功能类对象
- method 属性:指定调用方法
演示:
SQL类:
public class ReturnSql {//定义方法,返回查询的sql语句public String getSelectAll() {return new SQL() {{SELECT("*");FROM("student");}}.toString();}//定义方法,返回新增的sql语句public String getInsert(Student stu) {return new SQL() {{INSERT_INTO("student");INTO_VALUES("#{id},#{name},#{age}");}}.toString();}//定义方法,返回修改的sql语句public String getUpdate(Student stu) {return new SQL() {{UPDATE("student");SET("name=#{name}","age=#{age}");WHERE("id=#{id}");}}.toString();}//定义方法,返回删除的sql语句public String getDelete(Integer id) {return new SQL() {{DELETE_FROM("student");WHERE("id=#{id}");}}.toString();}
}
接口:
public interface PersonMapper {//查询全部//@Select("SELECT * FROM student")@SelectProvider(type = ReturnSql.class , method = "getSelectAll")public abstract List<Student> selectAll();//新增功能//@Insert("INSERT INTO student VALUES (#{id},#{name},#{age})")@InsertProvider(type = ReturnSql.class , method = "getInsert")public abstract Integer insert(Student stu);//修改功能//@Update("UPDATE student SET name=#{name},age=#{age} WHERE id=#{id}")@UpdateProvider(type = ReturnSql.class , method = "getUpdate")public abstract Integer update(Student stu);//删除功能//@Delete("DELETE FROM student WHERE id=#{id}")@DeleteProvider(type = ReturnSql.class , method = "getDelete")public abstract Integer delete(Integer id);
}
测试:
@Testpublic void selectAll() throws Exception {//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取One接口的实现类对象PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);//5.调用实现类的方法,接收结果List<Student> list = mapper.selectAll();//6.处理结果for (Student c : list) {System.out.println(c);}//7.释放资源sqlSession.close();is.close();}