java 怎么使用注解操作mybatis
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎么使用注解操作mybatis相关的知识,希望对你有一定的参考价值。
mybatis是orm框架 java操作它就是执行sql, 貌似没有用注解的吧。 最多就是 事务控制, 可以spring AOP 找一个cut point 全局设定 或者 @Transactional 这个也要在spring文件里面配置 网上有例子。 mybatis的话 直接config文件里面 mapping一些 mapper 然后做resultMap 直接写mybatis标准的可执行sql就ok了 用sqlsessiontemplate 直接调用就好了。 参考技术A 1、用script标签包围,然后像xml语法一样书写@Select("<script>",
"SELECT * FROM tbl_order",
"WHERE 1=1",
"<when test='title!=null'>",
"AND mydate = #mydate",
"</when>",
"</script>")
2、用Provider去实现SQL拼接,例如:
public class OrderProvider
private final String TBL_ORDER = "tbl_order";
public String queryOrderByParam(OrderPara param)
SQL sql = new SQL().SELECT("*").FROM(TBL_ORDER);
String room = param.getRoom();
if (StringUtils.hasText(room))
sql.WHERE("room LIKE #room");
Date myDate = param.getMyDate();
if (myDate != null)
sql.WHERE("mydate LIKE #mydate");
return sql.toString();
public interface OrderDAO
@SelectProvider(type = OrderProvider.class, method = "queryOrderByParam")
List<Order> queryOrderByParam(OrderParam param);
注意:方式1有个隐患就是当传入参数为空的时候,可能会造成全表查询。
复杂SQL用方式2会比较灵活(当然,并不建议写复杂SQL),而且可以抽象成通用的基类,使每个DAO都可以通过这个基类实现基本的通用查询,原理类似Spring JDBC Template。本回答被提问者采纳
MyBatis高级 注解开发
常用注解介绍
我们除了可以使用映射配置文件来操作以外,还可以使用注解形式来操作
常用注解
@Select(”查询的SQL语句“):执行查询操作注解
@Insert(”新增的SQL语句“):执行新增操作注解
@Update(”修改的SQL语句“):执行修改的操作注解
@Delete(”删除的SQL语句“):执行删除操作注解
注解实现查询操作
创建接口和查询方法
在核心配置文件中配置映射关系
编写测试类
注解实现新增操作
创建新增方法
编写测试类
注解实现修改操作
创建修改方法
编写测试类
注解实现删除操作
创建删除方法
编写测试类
StudentMapper
package com.itheima.mapper; import com.itheima.bean.Student; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface StudentMapper { //查询全部 @Select("select * from Student") public abstract List<Student> selectAll(); //新增操作 @Insert("insert into Student values(#{id},#{name},#{age})") public abstract Integer insert(Student stu); //修改操作 @Update("update Student set name=#{name},age=#{age} where id=#{id}") public abstract Integer update(Student stu); //删除操作 @Delete("delete from Student where id=#{id}") public abstract Integer delete(Integer id); }
Test01
package com.itheima.test; import com.itheima.bean.Student; import com.itheima.mapper.StudentMapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class Test01 { @Test public 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.获取StudentMapper接口的实现类对象 StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); //5.调用实现类对象中的方法,接受结果 List<Student> list = mapper.selectAll(); //6.处理结果 for (Student student : list) { System.out.println(student); } //7.释放资源 sqlSession.close(); is.close(); } @Test public void insert() 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.获取StudentMapper接口的实现类对象 StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); //5.调用实现类对象中的方法,接受结果 Student stu=new Student(9,"王10",30); Integer insert = mapper.insert(stu); //6.处理结果 System.out.println(insert); //7.释放资源 sqlSession.close(); is.close(); } @Test public void update() 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.获取StudentMapper接口的实现类对象 StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); //5.调用实现类对象中的方法,接受结果 Student stu=new Student(9,"王11",40); Integer update = mapper.update(stu); //6.处理结果 System.out.println(update); //7.释放资源 sqlSession.close(); is.close(); } @Test public void delete() 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.获取StudentMapper接口的实现类对象 StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); //5.调用实现类对象中的方法,接受结果 Integer delete = mapper.delete(9); //6.处理结果 System.out.println(delete); //7.释放资源 sqlSession.close(); is.close(); } }
MyBatisConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!--MyBatis的DTD约束--> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration 核心根标签--> <configuration> <!--引入数据库连接的配置文件--> <properties resource="jdbc.properties"/> <!--配置LOG4J--> <settings> <setting name="logImpl" value="log4j"/> </settings> <!--起别名--> <typeAliases> <package name="com.itheima.bean"/> </typeAliases> <!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个--> <environments default="mysql"> <!--environment配置数据库环境 id属性唯一标识--> <environment id="mysql"> <!-- transactionManager事务管理。 type属性,采用JDBC默认的事务--> <transactionManager type="JDBC"></transactionManager> <!-- dataSource数据源信息 type属性 连接池--> <dataSource type="POOLED"> <!-- property获取数据库连接的配置信息 --> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!--配置映射关系--> <mappers> <package name="com.itheima.mapper"/> </mappers> </configuration>
log4j.properties
# Global logging configuration # ERROR WARN INFO DEBUG log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
jdbc.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://192.168.23.129:3306/db3 username=root password=root
注解开发小结
注解可以简化开发操作,省略映射配置文件的编写。
常用注解
@Select(”查询的SQL语句“):执行查询操作注解
@Insert(”新增的SQL语句“):执行新增操作注解
@Update(”修改的SQL语句“):执行修改的操作注解
@Delete(”删除的SQL语句“):执行删除操作注解
配置映射关系
<mappers>
<package name="接口所在包"/>
</mappers>
以上是关于java 怎么使用注解操作mybatis的主要内容,如果未能解决你的问题,请参考以下文章