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 ...
随机推荐
- 转载:tar 解压缩命令~
转载自:http://blog.csdn.net/dunyanan1/article/details/38869059tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文 ...
- day14 生成器的进阶
一.生成器的两种形式 1.生成器函数的应用 # def cloth(): # for i in range(100): # yield '衣服%s'%i # # g = cloth() # for ...
- MySQL的order by子句
1.语法:select 字段列表 from 表名 [where 子句][group by 子句][having 子句][order by 子句]; 注解: 1.默认是从第一条记录开始升序, 2.des ...
- 在看lua仿单继承
--lua仿单继承 Account = { balance = } --对于成员变量,第一此访问要使用元表中的,在第一次也赋值到自己的域中了 --将不涉及到__index了 function Acco ...
- 【BZOJ2799】[Poi2012]Salaries 乱搞
[BZOJ2799][Poi2012]Salaries Description 给出一棵n个结点的有根树,结点用正整数1~n编号.每个结点有一个1~n的正整数权值,不同结点的权值不相同,并且一个结点的 ...
- Sharepoint server 2016自定义作业不能部署
最近帮客户部署SharePoint server 2016生产环境,自定义作业总是不能部署上,原来我在部署过程中MinRole选的是Web前端服务器:经过几天的测试研究,发现要有single serv ...
- 巨蟒django之权限10,内容梳理&&权限组件应用
1.CRM项目内容梳理: 2.权限分配 3.权限组件的应用
- php自定义函数: 下载远程文件 httpcopy
<?php function httpcopy($url, $file="", $timeout=60) { $file = empty($file) ? pathinfo( ...
- tomcat单应用多实例部署报错 应用jar不存在
使用tomcat部署war包,同一环境有tomcat7和tomcat8两个应用,我这边使用tomcat7, 应用部署在其他目录,通过在启动脚本中设置CATALINA_HOME和CATALINA_BAS ...
- django实现密码加密的注册(数据对象插入)-结合forms表单实现表单验证
forms表单 #_*_coding:utf-8_*_ from django import forms class regis(forms.Form): username = forms.CharF ...