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 ...
随机推荐
- LUA速成教程
說明: 1.該教程適合對編程有一定了解的人員. 2.該教程在WINDOWS下實驗. 切入正題, 1.首先下載Notepad++,工欲善其事,必先利其器,然後安裝NotePad++的插件NppExec. ...
- NGUI Checkbox与PlayerPrefs
UICheckboxPrefs.cs 1,bool isChecked:false 为“初始”状态,true为“选中”: 2,bool startsChecked:true,一运行,就显示UISpri ...
- Unity3d 游戏退出界面1
功能需求:点击退出按钮,弹出“退出”UI,询问玩家是否退出游戏: 退出按钮 退出UI: publicclass GameQuit : MonoBehaviour { // 取消按钮 public G ...
- tomcat ; nginx ;mysql
[说明]上午在服务器上部署了自己的web目录(tomcat虚拟目录),下午安装并了解了nginx(出了点问题,后来解决了),晚上尝试nginx和tomcat配置(一头雾水) 一:今日完成 1)配置to ...
- 宇视4G设备采用GB/T28181协议成功接入EasyGBS国标流媒体平台的设置流程
经过了多天的调试对接,终于将宇视的布控球顺利接入到了EasyGBS的国标平台,特地写一下对接过程中遇到的问题,希望能帮助大家避开一些麻烦: 第一步:电脑连接无线网络IPCWIFI,密码12345678 ...
- js获取滚动条的位置
页面具有 DTD,或者说指定了 DOCTYPE 时,使用 document.documentElement. 页面不具有 DTD,或者说没有指定了 DOCTYPE,时,使用 document.body ...
- Linux下带宽流量工具iftop实践
在Linux/类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop ...
- php7/etc/php-fpm.d 配置
php7/etc/php-fpm.d/www.conf nginx php-fpm 高并发优化 - 日记本的回忆 - 博客园 https://www.cnblogs.com/cocoliu/p/856 ...
- 根据字段表 自动创建 表SQL
create PROC CreateTableSql ) AS ) ,) ,) ) ,) ,) ,@IsIdentity bit ,@IsNull bit ,@IsPrimaryKey bit ),) ...
- mybatis springmvc velocity的demo
https://codeload.github.com/xingfly/SBlog/zip/master 1.记得导入数据库并修改 数据库的配置. 2.使用jetty运行 pom 添加jetty &l ...