mybatis(三)
上面2章写了mybatis的基本操作,今天就写写mybatis的动态代理吧。
动态代理有4个基本原则:
1.userMapper.xml里面的namespace="cn.my.dao.UserDaoMapper"一定要和接口的包名+接口名一致
2.userMapper.xml里面的statementid值要和接口中的方法名一致
3.userMapper.xml里面的入参类型要和接口中方法的参数类型一致
4.userMapper.xml里面的返回类型要和接口中方法的返回类型一致
好了不废话直接上代码.
首先改造一下上一篇的代码,为了不修改user.xml,添加一个新的UserMapper.xml文件,然后修改部分代码
<?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="cn.my.dao.UserDaoMapper">
<select id="findById" parameterType="int" resultType="cn.my.mybatis.entity.User">
select * from user where id=#{id}
</select> <!-- 新增映射 修改id名称为了以后封装basedao-->
<insert id="insert" parameterType="cn.my.mybatis.entity.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user` (`username`,`birthday`,`sex`,`address`)
VALUES(#{username},#{birthday},#{sex},#{address})
</insert> <!-- 修改用户 修改id名称为了以后封装basedao-->
<update id="update" parameterType="cn.my.mybatis.entity.User">
UPDATE `user`
SET
`username` = #{username},
`birthday` = #{birthday},
`sex` = #{sex},
`address` = #{address}
WHERE `id` = #{id} ;
</update>
<!-- 删除 修改id名称为了以后封装basedao -->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
</mapper>
第二步新增一个UserDaoMapper.java接口
package cn.my.dao;
import cn.my.mybatis.entity.User;
public interface UserDaoMapper {
public User findById(int id);
public void insert(User user);
public void update(User user);
public void delete(int id);
}
第三步新增一个测试类TestUserMapper.java文件
package cn.my.test; import java.io.IOException;
import java.io.InputStream;
import java.util.Date; 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.Before;
import org.junit.Test; import cn.my.dao.UserDaoMapper;
import cn.my.mybatis.entity.User; public class TestUserMapper {
private SqlSessionFactory factory;
@Before
public void setUp() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void testFindById(){
SqlSession session = factory.openSession();
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
User user = dao.findById(10);
session.close();
System.out.println(user);
}
/**
* 新增用户
*/
@Test
public void testInserUser(){
SqlSession session = factory.openSession();
User user = new User();
user.setAddress("许昌");
user.setUsername("曹操1");
user.setSex("男");
user.setBirthday(new Date());
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
dao.insert(user);
session.commit();
session.close();
System.out.println(user.getId());
}
/**
* 修改
*/
@Test
public void testUpdateUser(){
SqlSession session = factory.openSession();
User user = new User();
user.setId(34);
user.setAddress("许昌1");
user.setUsername("曹操2");
user.setSex("女");
user.setBirthday(new Date());
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
dao.update(user);
session.commit();
session.close();
}
/**
* 删除
*/
@Test
public void testDeleteUser(){
SqlSession session = factory.openSession();
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
dao.delete(34);
session.commit();
session.close();
} }
运行结果:
查询结果:User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]
新增结果:
打印结果:34
修改结果:
删除结果:

以上修改为动态代理就已经修改好了。
下一章写sql动态标签
可以加微信群,一起交流,加时注明在哪里看到的

mybatis(三)的更多相关文章
- spring与mybatis三种整合方法
spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...
- SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- mybatis三个执行器的差别
myBatis官方对参数"defaultExecutorType"是这样说明的: 有这样三种执行器, SIMPLE是普通的执行器:REUSE执行器会重用预处理语句(prepared ...
- mybatis(三)配置mapper.xml 的基本操作
参考:https://www.cnblogs.com/wuzhenzhao/p/11101555.html XML 映射文件 本文参考mybatis中文官网进行学习总结:http://www.myba ...
- 通过项目逐步深入了解Mybatis<三>
Mybatis 高级知识 安排:对订单商品数据模型进行分析 订单商品数据模型 数据模型分析思路: 1.每张表记录的数据内容(分模块对每张表记录的内容进行熟悉,相当于学习系统需求的过程) 2.每张表重要 ...
- 浅谈Mybatis(三)
一.动态SQL 1.sql片段 解决sql语句的冗余代码问题. <sql id="SELECT_T_USER"> select id,name,password,bir ...
- 框架应用:Mybatis (三) - 关系映射
你有一张你自己的学生证?(一对一) 你这一年级有多少个学生?(一对多) 班上学生各选了什么课?(多对多) 两张表以上的操作都需要联立多张表,而用SQL语句可以直接联立两张表,用工程语言则需要手动完成这 ...
- Mybatis(三)返回值
Mybatis返回值 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则 ...
随机推荐
- MySql按每日、每周、每月分组统计数据
select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select ...
- 正则表达式-linux基础
通配符 通赔符是模糊匹配的基础,因为通赔符机制的存在使得我们在查找文件的时候非常方便 * :匹配任意长度的任意字符,也可以一个都没有 . :匹配任意单个字符,必须有一个 [ ] ...
- 震惊!WIN2003存在后门大全,提权成功率高
从某种意义上说,服务器被攻击是不可避免的,甚至被控制也情有可原.但绝对不能容忍的是,服务器被植入后门,攻击者如入无人之境,而管理者去浑然不觉.本文将对当前比较流行的后门技术进行解析,知己知彼方能杜绝 ...
- linux(九)之网络基础
一.ping命令 1.1.作用 用于检测主机.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 1.2.命令说明 pi ...
- mapper.xml是怎样实现Dao层接口
上午写了一个简单的 从xml读取信息实例化一个Bean对象.下午就开始想mybatis是怎么通过xml文件来实现dao层接口的,一开始想直接用Class.forName(String name)然后调 ...
- PHP访问连接MYSQL数据库
1.连接数据库 使用mysql_connect()函数建立与MySQL数据库的连接 源码:$con=mysql_connect("主机名或IP","用户名&q ...
- mysql 插入字段 字符串
update hand_over set pay_info='{"waring_tip":"{\"pay_order_cancel\":0,\&qu ...
- Python Counter class
Counter class https://docs.python.org/2/library/collections.html#collections.Counter # class collect ...
- C#后台调用浏览器打开下载连接地址的三种方法
一.从注册表中读取到本地计算机默认浏览器,然后调用下载. private void button1_Click(object sender, EventArgs e) { //从注册表 ...
- 三,ESP8266 SPI
重点是说SPI通信协议,,,, 不要害怕协议因为协议是人规定的,,刚好我也是人......规定的协议既然能成为规范让所有人所接受,那么必然有它的优势和优点,必然值得学习,, 害怕协议的人是因为当初碰到 ...