Mybatis入门2-动态代理实现CRUD
MyBatis动态代理生成DAO的步骤:
1) 编写数据管理的接口XxxMapper
2) 编写该接口对应的Mapper.xml
a) namespace必须与Mapper接口全名一致
b) statement的id必须和Mapper接口中的对应方法名一致
c) statement的resultType必须和Mapper接口中对应方法返回值一致
3) 通过SqlSession的getMapper(XxxMapper.class)方法来获取动态代理的Mapper实现类对象
开发中运用动态代理的比较多,下面简单的介绍一个简单的案例关于增删改查的测试:
1.编写相应的接口
public interface UserMapper { /**根据id查询用户
* @param id
* @return
*/
public User queryUserById(Long id); /**查询全部的用户
* @return
*/
public List<User> queryAll(); /**增加用户
* @param user
*/
public void insertUser(User user); /**更新用户
* @param user
*/
public void updateUser(User user); /**
* 删除用户
* @param id
*/
public void deleteById(Long id);
}
2.编写主配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载外部配置文件 -->
<properties resource="jdbc.properties"></properties>
<settings>
<!--开启驼峰命名法-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings> <!-- 起别名 -->
<typeAliases>
<typeAlias alias="User" type="cn.mybatis.pojo.User"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!-- 指定mapper的配置文件 -->
<mappers>
<mapper resource="mapper.xml"/>
<mapper resource="usermapper.xml"/>
</mappers>
</configuration>
3.编写映射配置文件
<?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.mapper.UserMapper"> <select id="queryUserById" parameterType="java.lang.Long" resultType="User">
select * from tb_user where id = #{id}
</select> <select id="queryAll" resultType="User">
select * from tb_user
</select> <insert id="insertUser" parameterType="User">
INSERT INTO tb_user (
id,
user_name,
password,
name,
age,
sex,
birthday,
created,
updated
)VALUES(
null,
#{userName},
#{password},
#{name},
#{age},
#{sex},
#{birthday},
NOW(),
NOW()
);
</insert>
<delete id="deleteById" parameterType="Long">
DELETE FROM tb_user WHERE id = #{id}
</delete>
</mapper>
4.编写测试类
package cn.mybatis.junit.test; import static org.junit.Assert.*; import java.io.InputStream;
import java.util.List; 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; public class UserMapperTest { private UserMapper userMapper; InputStream inputStream;
SqlSessionFactory sqlSessionFactory;
SqlSession sqlSession; @Before
public void setUp() throws Exception { String resource = "mybatis-config.xml"; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); // 通过动态代理获取
userMapper = sqlSession.getMapper(UserMapper.class); } /**
* 根据id查询
*/
@Test
public void test() {
User user = userMapper.queryUserById(1L);
System.out.println(user);
}
/**
* 查询全部
*/
@Test
public void test1() {
List<User> all = userMapper.queryAll(); for (User user2 : all) {
System.out.println(user2);
}
} /**
* 插入用户
*/
@Test
public void test2() {
User user = new User();
user.setAge(22);
user.setBirthday(null);
user.setName("jack");
user.setPassword("123");
user.setSex(1);
user.setuserName("pick jack"); userMapper.insertUser(user); this.sqlSession.commit();
} /**
* 删除
*/
@Test
public void test3() {
this.userMapper.deleteById(12L); this.sqlSession.commit();
}
}
Mybatis入门2-动态代理实现CRUD的更多相关文章
- mybatis 05: mybatis中的动态代理
mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...
- Mybatis入门之动态sql
Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...
- JavaWeb_(Mybatis框架)Mapper动态代理开发_三
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- Mybatis笔记 - Mapper动态代理
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mappe ...
- MyBatis笔记——Mapper动态代理
前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...
- MyBatis通过Mapper动态代理来实现curd操作
MyBatis官方推荐使用mapper代理方法开发mapper接口,程序员不需要编写mapper实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或者map对象,保证dao的通用性 ...
- 【Mybatis】-- Mapper动态代理开发注意事项
1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...
- Mybatis学习3——动态代理
动态代理只需要接口和mapper映射文件不需要实现类 动态代理规范 1.namespace必须是接口的全路径 2.接口的方法必须与sql的id一致 3.接口的入参与parameterType类型一致 ...
- mybatis入门基础----动态SQL
原文:http://www.cnblogs.com/selene/p/4613035.html 阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 m ...
随机推荐
- day5笔记
一.上节回顾: 1,find通过元素找索引,可切片,找不到返回-12,index,找不到报错.3,split 由字符串分割成列表,默认按空格.4,captalize 首字母大写,其他字母小写.5,up ...
- 如何通过PHP判断年份是否是闰年----两种方法
1.定义:闰年是对4取余为0,对100取余不等于0,对400取余等于0的年是闰年. 2.代码: 第一种方法:直接函数判断 $day = date('Y'); if ($day%4==0&&am ...
- iptables 实际操作 之 规则查询 2
在之前的文章中,我们已经总结过,iptables 为我们预定义了4张表,他们分别是raw 表,mangle表,nat表,filter表,不同的表拥有不同的功能. filter 负责过滤功能,比如允许那 ...
- 构造三层时报错“程序 “D:\MyTest\....”不包含适合于入口点的静态"Main"方法”
错误 1 程序“D:\MyTest\EBookShop\Model\obj\x86\Debug\Model.exe”不包含适合于入口点的静态“Main”方法 原因:原来创建项目的时候,用的是“空项目” ...
- [Spring Data MongoDB]学习笔记--牛逼的MongoTemplate
MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面. 注:MongoTemplate是线程安全的. MongoTemplate实现了interface MongoOperat ...
- iOS KVO详解
一.KVO 是什么? KVO 是 Objective-C 对观察者设计模式的一种实现.[另外一种是:通知机制(notification),详情参考:iOS 趣谈设计模式——通知]: KVO 提供一种机 ...
- Creating a Message Queue in PHP Without External Libraries
w http://www.ebrueggeman.com/blog/creating-a-message-queue-in-php
- python系列七:Python3字典dict
#!/usr/bin/python #Python3 字典#字典是支持无限极嵌套的citys={ '北京':{ '朝阳':['国贸','CBD','天阶','我爱我家','链接地产 ...
- 《Deep learning》第四章——数值计算
数值计算 机器学习算法通常需要大量的数值计算.这通常是指通过迭代过程更新解的估计值来解决数学问题的算法,而不是通过解析过程推导出公式来提供正确解的方法.常见的操作包括优化(找到最小化或最大化函数值的参 ...
- Python基础-时间模块和radom模块
时间模块 import time # 引入时间模块 print(time.time()) # 1508146954.9455004: 时间戳 print(time.clock()) # 计算CPU执行 ...