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 ...
随机推荐
- Core Services层
本文转载至 http://jingyan.baidu.com/article/cdddd41c57360853cb00e124.html Core Services层是系统很多部分的基础部分,也许应用 ...
- Python HTMLTestRunner报告及BeautifulReport报告
import unittest import HTMLTestRunner class Testfunc(unittest.TestCase): def testa(self): "&quo ...
- 记录-Jquery uploadify文件上传实例
原本做的是from表单的文件上传,后来因需要用ajax异步,so接触到了Jquery uploadify上传 贴上代码,以供参考 需要引入的js文件 <link href="../re ...
- A C Program to demonstrate adjacency list representation of graphs
w Graph and its representations - GeeksforGeekshttp://www.geeksforgeeks.org/graph-and-its-representa ...
- ng-disabled的使用
1.适用范围 该指令适用于<input>, <select>,<button> 和 <textarea> 元素. 2.用法解析 ng-disabled ...
- MySQL事件的先后
今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...
- python面试题(四)
1 常用字符串格式化哪几种? 最方便的 print('hello %s and %s' % ('df', 'another df')) 复制代码 但是,有时候,我们有很多的参数要进行格式化,这个时候, ...
- 001-Spring在代码中获取bean的几种方式
一.概述 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类Applicati ...
- Python基础-set集合
1.集合的创建 s = set('fansik and fanjinbao') print(s) 打印结果(去掉了重复的字符):{'k', 'd', 'f', 'n', ' ', 'j', 'i', ...
- javascript高级语法
一.JavaScript对象 1.js对象简介 1.1 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,在JavaScrip ...