MyBatis_动态代理
一、项目结构
二、代码实现
import java.util.List;
import java.util.Map; import com.jmu.bean.Student; public interface IStudentDao {
void insertStudent(Student student);
void insertStudentCacheId(Student student);// 插入后获取
void deleteStudentById(int id);
void updateStudent(Student student);
List<Student> selectAllStudents();// 查询所有
/* Map<String,Object> selectAllStudentsMap(); */
Student selectStudentById(int id); // 根据id查询
List<Student> selectStudentsByName(String name);// 模糊查询
}
com.jmu.dao.IStudentDao
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.BasicConfigurator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.jmu.bean.Student;
import com.jmu.dao.IStudentDao;
import com.jmu.utils.MybatisUtils; public class MyTest {
private IStudentDao dao;
private SqlSession sqlSession; @Before
public void Before() {
sqlSession = MybatisUtils.getSqlSession();
dao = sqlSession.getMapper(IStudentDao.class);
BasicConfigurator.configure();
}
@After
public void after(){
if (sqlSession!=null) {
sqlSession.commit(); } }
@Test
public void test01() {
Student student = new Student("明明", 19, 87.9);
System.out.println("插入前:student=" + student);
dao.insertStudent(student);
System.out.println("插入后:student=" + student);
sqlSession.commit();
} // 插入后获取
@Test
public void test02() {
Student student = new Student("明明", 23, 99.5);
System.out.println("插入前:student=" + student);
dao.insertStudentCacheId(student);
System.out.println("插入后:student=" + student);
sqlSession.commit();
} @Test
public void test03() {
dao.deleteStudentById(25);
sqlSession.commit();
} @Test
public void test04() {
Student student = new Student("红酒", 23, 93.5);
student.setId(28);
dao.updateStudent(student);
sqlSession.commit();
} @Test
public void test05() {
List<Student> students = dao.selectAllStudents();
for (Student student : students) {
System.out.println(student);
}
} /*@Test
public void test06() {
Map<String, Object> map = dao.selectAllStudentsMap();
System.out.println(map.get("王维"));
}*/ @Test
public void test07() {
Student student = dao.selectStudentById(154);
System.out.println(student);
} @Test
public void test08() {
List<Student> students = dao.selectStudentsByName("明");
for (Student student : students) {
System.out.println(student);
} } }
com.jmu.test.MyTest
### Global logging configuration
log4j.logger.test=debug,console
##log4j.Logger.com.jmu.dao.IStudentDao=trace,console
### Uncomment for MyBatis logging
log4j.logger.org.apache.ibatis=ERROR log4j.logger.org.apache.ibatis.session.AutoMappingUnknownColumnBehavior=WARN ### 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 log4j.appender.lastEventSavedAppender=org.apache.ibatis.session.AutoMappingUnknownColumnBehaviorTest$LastEventSavedAppender
log4j.properties
<?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">
<mapper namespace="com.jmu.dao.IStudentDao">
<insert id="insertStudent" parameterType="Student">
insert into
student(name,age,score) values(#{name},#{age},#{score})
</insert> <insert id="insertStudentCacheId">
insert into student(name,age,score) values(#{name},#{age},#{score})
<selectKey resultType="int" keyProperty="id" order="AFTER">
select
@@identity
</selectKey>
</insert>
<delete id="deleteStudentById">
delete from student where id=#{XXX}<!--这里的#{} 仅仅是个占位符,里边放什么都行 -->
</delete>
<update id="updateStudent">
update student set
name=#{name},age=#{age},score=#{score} where id=#{id}
</update>
<select id="selectAllStudents" resultType="Student">
select
id,name,age,score from student
</select>
<select id="selectStudentById" resultType="Student">
select
id,name,age,score from student where id=#{JJJ}
</select>
<select id="selectStudentsByName" resultType="Student">
<!-- select id,name,age,score from student where name like CONCAT('%',#{XXX},'%') -->
<!-- select id,name,age,score from student where name like '%王二%' -->
<!-- select id,name,age,score from student where name like '%${value}%' --><!-- 不存在sql注入 风险,但是效率低 -->
select id,name,age,score from student where name like '%' #{XXX} '%'<!--常用 -->
</select>
</mapper>
/mybatis4-mapperDynamicProxy/src/com/jmu/dao/mapper.xml
输出:
插入前: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]
output
MyBatis_动态代理的更多相关文章
- JDK动态代理
一.基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念.代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念.这里引用维基百科上的一句话对代理进行定义: A ...
- AOP之Castle DynamicProxy 动态代理
这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...
- java动态代理的2种实现方式
java的动态代理在接java的api上有说明,这里就不写了.我理解的代理: 对特定接口中特定方法的功能进行扩展,这就是代理.代理是通过代理实例关联的调用处理程序对象调用方法. 下面通过一个例子看一下 ...
- JDK动态代理实现原理
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的.直到看了他的文章才彻底明白,附网址:htt ...
- java中动态代理的实现
动态代理的实现 使用的模式:代理模式. 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.类似租房的中介. 两种动态代理: (1)jdk动态代理,jdk动态代理是由Java内部的反射机制 ...
- 静态代理和利用反射形成的动态代理(JDK动态代理)
代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...
- Java动态代理
代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...
- Java 动态代理机制详解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- 静态代理&动态代理
原文地址:http://blog.csdn.net/partner4java/article/details/7048879 静态AOP和动态AOP. 静态代理: 代理对象与被代理对象必须实现同一个接 ...
随机推荐
- 洛谷P5264 【模板】多项式三角函数
题面 传送门 题解 据说有一个叫做欧拉公式的东西 \[e^{ix}=\cos(x)+i\sin(x)\] 别问我为啥我今天第一次看到它 那么显然也有 \[e^{-ix}=\cos(x)-i\sin(x ...
- Elasticsearch C# NEST IndexMany Children
foreach (IEnumerable<object> batch in objects.Batch(1000)) { var indexResponse = client.Bulk(s ...
- [Objective-C语言教程]变量(6)
变量是程序可以操作的存储区域的名称. Objective-C中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局; 可存储在内存中的值的范围; 以及可以应用于变量的操作集. 变量的名称可以由字 ...
- 2,ThreadGroup 概念以及用法
当一个任务需要多个子线程去处理业务,这时候不希望这些子线程杂乱无章, 就需要把这些线程统一管理起来,这时候线程组就产生了. ThreadGroup 常用方法讲解 activeCount() 返回 ...
- UVA-10929-You can say 11(秦九昭算法+同余与模算术)
原题链接 1000位大数取余: 秦九昭算法+同余与模算术: 1314 = (((1)*10+3)*10+1)*10+4 ( a + b ) % n = ( ( a % n ) + ( b % n ) ...
- django 后台格式化数据库查询出的日期
在项目中,我遇到这样的情况,使用ajax获取查询出来的数据,而这些数据中某个字段是日期datetime格式,在模板中显示的样式很怪异.由于前端使用了js控件,也不能使用django的模板过滤器. 所以 ...
- docker搭建tomcat环境
1.拉取镜像 docker pull tomcat 2.运行容器 docker run --name tomcat -p : -v /data/tomcat/test:/usr/local/tomca ...
- 3. Javascript学习笔记——变量、内存、作用域
3. 变量.内存.作用域 3.1 基本类型和引用类型的值 ECMAScript 变量可能包含两种不同数据类型的值:基本类型值[Undefined.Null.Boolean.Number 和 Strin ...
- 基于spring和mybatis的简单项目流程
Mybatis整合Spring配置 第一部分:配置Spring框架 配置SpringMVC的步骤 配置流程图 SpringMVC配置 导入包(基本包5个,1日志依赖包,2webmvc支持包) 构建一个 ...
- git设置core.autocrlf
背景: 使用虚拟机共享windows文件夹,文件夹中用git clone 一个仓库.在linux下编辑文件,用git status发现几乎所有的文件都为修改状态. 原因: windows下和lin ...