MyBatis动态代理
Posted hoje
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis动态代理相关的知识,希望对你有一定的参考价值。
一、项目结构
二、代码实现
1 import java.util.List; 2 import java.util.Map; 3 4 import com.jmu.bean.Student; 5 6 public interface IStudentDao { 7 void insertStudent(Student student); 8 void insertStudentCacheId(Student student);// 插入后获取 9 void deleteStudentById(int id); 10 void updateStudent(Student student); 11 List<Student> selectAllStudents();// 查询所有 12 /* Map<String,Object> selectAllStudentsMap(); */ 13 Student selectStudentById(int id); // 根据id查询 14 List<Student> selectStudentsByName(String name);// 模糊查询 15 }
1 import java.util.List; 2 import org.apache.ibatis.session.SqlSession; 3 import org.apache.log4j.BasicConfigurator; 4 import org.junit.After; 5 import org.junit.Before; 6 import org.junit.Test; 7 8 import com.jmu.bean.Student; 9 import com.jmu.dao.IStudentDao; 10 import com.jmu.utils.MybatisUtils; 11 12 public class MyTest { 13 private IStudentDao dao; 14 private SqlSession sqlSession; 15 16 @Before 17 public void Before() { 18 sqlSession = MybatisUtils.getSqlSession(); 19 dao = sqlSession.getMapper(IStudentDao.class); 20 BasicConfigurator.configure(); 21 } 22 @After 23 public void after(){ 24 if (sqlSession!=null) { 25 sqlSession.commit(); 26 27 } 28 29 } 30 @Test 31 public void test01() { 32 Student student = new Student("明明", 19, 87.9); 33 System.out.println("插入前:student=" + student); 34 dao.insertStudent(student); 35 System.out.println("插入后:student=" + student); 36 sqlSession.commit(); 37 } 38 39 // 插入后获取 40 @Test 41 public void test02() { 42 Student student = new Student("明明", 23, 99.5); 43 System.out.println("插入前:student=" + student); 44 dao.insertStudentCacheId(student); 45 System.out.println("插入后:student=" + student); 46 sqlSession.commit(); 47 } 48 49 @Test 50 public void test03() { 51 dao.deleteStudentById(25); 52 sqlSession.commit(); 53 } 54 55 @Test 56 public void test04() { 57 Student student = new Student("红酒", 23, 93.5); 58 student.setId(28); 59 dao.updateStudent(student); 60 sqlSession.commit(); 61 } 62 63 @Test 64 public void test05() { 65 List<Student> students = dao.selectAllStudents(); 66 for (Student student : students) { 67 System.out.println(student); 68 } 69 } 70 71 /*@Test 72 public void test06() { 73 Map<String, Object> map = dao.selectAllStudentsMap(); 74 System.out.println(map.get("王维")); 75 }*/ 76 77 @Test 78 public void test07() { 79 Student student = dao.selectStudentById(154); 80 System.out.println(student); 81 } 82 83 @Test 84 public void test08() { 85 List<Student> students = dao.selectStudentsByName("明"); 86 for (Student student : students) { 87 System.out.println(student); 88 } 89 90 } 91 92 }
1 ### Global logging configuration 2 log4j.logger.test=debug,console 3 ##log4j.Logger.com.jmu.dao.IStudentDao=trace,console 4 ### Uncomment for MyBatis logging 5 log4j.logger.org.apache.ibatis=ERROR 6 7 log4j.logger.org.apache.ibatis.session.AutoMappingUnknownColumnBehavior=WARN 8 9 ### Console output... 10 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 11 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 12 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 13 14 log4j.appender.lastEventSavedAppender=org.apache.ibatis.session.AutoMappingUnknownColumnBehaviorTest$LastEventSavedAppender
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="com.jmu.dao.IStudentDao"> 6 <insert id="insertStudent" parameterType="Student"> 7 insert into 8 student(name,age,score) values(#{name},#{age},#{score}) 9 </insert> 10 11 <insert id="insertStudentCacheId"> 12 insert into student(name,age,score) values(#{name},#{age},#{score}) 13 <selectKey resultType="int" keyProperty="id" order="AFTER"> 14 select 15 @@identity 16 </selectKey> 17 </insert> 18 <delete id="deleteStudentById"> 19 delete from student where id=#{XXX}<!--这里的#{} 仅仅是个占位符,里边放什么都行 --> 20 </delete> 21 <update id="updateStudent"> 22 update student set 23 name=#{name},age=#{age},score=#{score} where id=#{id} 24 </update> 25 <select id="selectAllStudents" resultType="Student"> 26 select 27 id,name,age,score from student 28 </select> 29 <select id="selectStudentById" resultType="Student"> 30 select 31 id,name,age,score from student where id=#{JJJ} 32 </select> 33 <select id="selectStudentsByName" resultType="Student"> 34 <!-- select id,name,age,score from student where name like CONCAT(\'%\',#{XXX},\'%\') --> 35 <!-- select id,name,age,score from student where name like \'%王二%\' --> 36 <!-- select id,name,age,score from student where name like \'%${value}%\' --><!-- 不存在sql注入 风险,但是效率低 --> 37 select id,name,age,score from student where name like \'%\' #{XXX} \'%\'<!--常用 --> 38 </select> 39 </mapper>
输出:
插入前:student=Student [id=null, name=明明, score=87.9, age=19] 0 [main] DEBUG com.jmu.dao.IStudentDao.insertStudent - ==> Preparing: insert into student(name,age,score) values(?,?,?) 56 [main] DEBUG com.jmu.dao.IStudentDao.insertStudent - ==> Parameters: 明明(String), 19(Integer), 87.9(Double) 57 [main] DEBUG com.jmu.dao.IStudentDao.insertStudent - <== Updates: 1 插入后:student=Student [id=null, name=明明, score=87.9, age=19] 插入前:student=Student [id=null, name=明明, score=99.5, age=23] 82 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId - ==> Preparing: insert into student(name,age,score) values(?,?,?) 82 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId - ==> Preparing: insert into student(name,age,score) values(?,?,?) 83 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId - ==> Parameters: 明明(String), 23(Integer), 99.5(Double) 83 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId - ==> Parameters: 明明(String), 23(Integer), 99.5(Double) 85 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId - <== Updates: 1 85 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId - <== Updates: 1 88 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId!selectKey - ==> Preparing: select @@identity 88 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId!selectKey - ==> Preparing: select @@identity 88 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId!selectKey - ==> Parameters: 88 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId!selectKey - ==> Parameters: 126 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId!selectKey - <== Total: 1 126 [main] DEBUG com.jmu.dao.IStudentDao.insertStudentCacheId!selectKey - <== Total: 1 插入后:student=Student [id=165, name=明明, score=99.5, age=23] 145 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - ==> Preparing: delete from student where id=? 145 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - ==> Preparing: delete from student where id=? 145 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - ==> Preparing: delete from student where id=? 145 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - ==> Parameters: 25(Integer) 145 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - ==> Parameters: 25(Integer) 145 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - ==> Parameters: 25(Integer) 146 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - <== Updates: 0 146 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - <== Updates: 0 146 [main] DEBUG com.jmu.dao.IStudentDao.deleteStudentById - <== Updates: 0 162 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Preparing: update student set name=?,age=?,score=? where id=? 162 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Preparing: update student set name=?,age=?,score=? where id=? 162 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Preparing: update student set name=?,age=?,score=? where id=? 162 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Preparing: update student set name=?,age=?,score=? where id=? 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Parameters: 红酒(String), 23(Integer), 93.5(Double), 28(Integer) 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Parameters: 红酒(String), 23(Integer), 93.5(Double), 28(Integer) 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Parameters: 红酒(String), 23(Integer), 93.5(Double), 28(Integer) 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - ==> Parameters: 红酒(String), 23(Integer), 93.5(Double), 28(Integer) 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - <== Updates: 0 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - <== Updates: 0 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - <== Updates: 0 163 [main] DEBUG com.jmu.dao.IStudentDao.updateStudent - <== Updates: 0 181 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Preparing: select id,name,age,score from student 181 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Preparing: select id,name,age,score from student 181 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Preparing: select id,name,age,score from student 181 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Preparing: select id,name,age,score from student 181 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Preparing: select id,name,age,score from student 182 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Parameters: 182 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Parameters: 182 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Parameters: 182 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Parameters: 182 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - ==> Parameters: 188 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - <== Total: 8 188 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - <== Total: 8 188 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - <== Total: 8 188 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - <== Total: 8 188 [main] DEBUG com.jmu.dao.IStudentDao.selectAllStudents - <== Total: 8 Student [id=157, name=明明, score=87.9, age=19] Student [id=158, name=明明, score=87.9, age=19] Student [id=159, name=明明, score=87.9, age=19] Student [id=160, name=明明, score=87.9, age=19] Student [id=162, name=明明, score=87.9, age=19] Student [id=163, name=明明, score=99.5, age=23] Student [id=164, name=明明, score=87.9, age=19] Student [id=165, name=明明, score=99.5, age=23] 206 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Preparing: select id,name,age,score from student where id=? 206 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Preparing: select id,name,age,score from student where id=? 206 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Preparing: select id,name,age,score from student where id=? 206 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Preparing: select id,name,age,score from student where id=? 206 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Preparing: select id,name,age,score from student where id=? 206 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Preparing: select id,name,age,score from student where id=? 207 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Parameters: 157(Integer) 207 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Parameters: 157(Integer) 207 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Parameters: 157(Integer) 207 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Parameters: 157(Integer) 207 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Parameters: 157(Integer) 207 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - ==> Parameters: 157(Integer) 211 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - <== Total: 1 211 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - <== Total: 1 211 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - <== Total: 1 211 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - <== Total: 1 211 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - <== Total: 1 211 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentById - <== Total: 1 Student [id=157, name=明明, score=87.9, age=19] 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 247 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Preparing: select id,name,age,score from student where name like \'%\' ? \'%\' 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 253 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - ==> Parameters: 明(String) 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 262 [main] DEBUG com.jmu.dao.IStudentDao.selectStudentsByName - <== Total: 8 Student [id=157, name=明明, score=87.9, age=19] Student [id=158, name=明明, score=87.9, age=19] Student [id=159, name=明明, score=87.9, age=19] Student [id=160, name=明明, score=87.9, age=19] Student [id=162, name=明明, score=87.9, age=19] Student [id=163, name=明明, score=99.5, age=23] Student [id=164, name=明明, score=87.9, age=19] Student [id=165, name=明明, score=99.5, age=23]
以上是关于MyBatis动态代理的主要内容,如果未能解决你的问题,请参考以下文章