mybatis(1):入坑篇
依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<!-- 测试数据库 -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.4</version>
</dependency>
myBatis 配置
<?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配置文件 -->
<properties resource="jdbc.properties"/>
<environments default="test">
<environment id="test">
<transactionManager type="JDBC" />
<dataSource type="UNPOOLED">
<property name="driver" value="${hsqldb.driver}" />
<property name="url" value="${hsqldb.url}" />
<property name="username" value="${hsqldb.username}" />
<property name="password" value="${hsqldb.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- mapping 配置: 加载 Mapper.xml 和 Mapper.class -->
<mapper class="com.github.xsj.model.Mapper"/>
</mappers>
</configuration>
映射配置
使用 Mapper wrapper
package com.github.xsj.model;
public class User {
private Long id; // id 使用 Long 类型而非 long
private String name;
...
}
Wrapper:
package com.github.xsj.model;
public interface Mapper {
User getUser(long id);
void insertUser(User user);
@Update("update users set name = #{name}")
void updateUser(User user);
@Delete("delete from users where id = #{id}")
void deleteUser(long id);
}
映射文件: src\main\resources\com\github\xsj\model\Mapper.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="com.github.xsj.model.Mapper">
<select id="getUser" resultType="com.github.xsj.model.User">
select * from users where id = #{id}
</select>
<!-- get generated key! Note: keyColumn 之所以使用 ID 而非 id 是 hsqldb 将列名强行转换为大写所导致 -->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="ID">
insert into users values(#{id}, #{name})
</insert>
</mapper>
单元测试
sql 脚本
drop table users if exists;
create table users (
id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1) primary key,
name varchar(126) not null
);
insert into users(name) values('User1');
样例
public class BaseTest {
private final static Logger log = LoggerFactory.getLogger(BaseTest.class);
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void setUp() throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis-test-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
// 数据初始化
SqlSession session = sqlSessionFactory.openSession();
Connection conn = session.getConnection();
reader = Resources.getResourceAsReader("com/github/xsj/model/CreateDB.sql");
ScriptRunner runner = new ScriptRunner(conn);
runner.setLogWriter(new PrintWriter(System.out));
runner.runScript(reader);
reader.close();
conn.close();
session.close();
}
@Test
public void selectTest() {
SqlSession session = sqlSessionFactory.openSession();
try {
Mapper mapper = session.getMapper(Mapper.class);
assertThat(mapper.getUser(1), is(notNullValue()));
} finally {
session.close();
}
}
...
}
源码: https://github.com/xsj24/mybaits-getStarted/tree/v1.0.0
mybatis(1):入坑篇的更多相关文章
- RoboGuice 3.0 (一)入坑篇
RoboGuice是什么? 一个Android上的依赖注入框架. 依赖注入是什么? 从字面理解,这个框架做了两件事情,第一是去除依赖,第二是注入依赖.简单理解就是,将对象的初始化委托给一个容器控制器, ...
- Dagger2 (一) 入坑篇
为什么是Dagger2 为了更好的了解Dagger2,请先阅读RoboGuice篇了解依赖注入. 官方文档称,依赖注入这种技术已经在存在多年了,为什么Dagger2要造轮子? Dagger2是第一个全 ...
- Mybatis Plus 入坑(含最新3.X配置)
简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 使用它可以简化单表的操作, 节省开发时间, 国人 ...
- vuex 入坑篇
Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 这个状态自管理应用包含 ...
- 入“坑”mybatis后如何挣脱?
既然已经入"坑"mybatis了,你竟然还想着挣脱,我是不会让你挣脱的~ 当然我有一个算是挣脱的办法.那就是把它学会.理解透.这样我们也就不用在坑里一直徘徊,也算得上是一种挣脱吧! ...
- web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】
http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,J ...
- web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史
秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...
- Vue入坑第一篇
写在前面的话:文章是个人学习过程中的总结,为方便以后回头在学习.文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. 一.前言 本篇作为vue入门的一 ...
- RxJava+RxAndroid+MVP入坑实践(基础篇)
转载请注明出处:http://www.blog.csdn.net/zhyxuexijava/article/details/51597230.com 前段时间看了MVP架构和RxJava,最近也在重构 ...
随机推荐
- Jersey(1.19.1) - Hello World, Get started with Jersey using the embedded Grizzly server
Maven Dependencies The following Maven dependencies need to be added to the pom: <dependency> ...
- 使用Xpath从网页中获取数据
/// <summary> /// 从官方网站中抓取产品信息存放在本地数据库中 /// </summary> /// <returns></returns&g ...
- CSS 绝对定位和相对定位
CSS定位属性:一个定位属性,需配合四个定位坐标,实现定位 固定定位fixed 说明: 1.固定定位是相对于"浏览器窗口" 2.如果只设置了定位属性,未指定定位坐标时,元素将停留在 ...
- Redis配置中文翻译,3.2.1版
大部分常见设置都翻译了,还有一些是从网上复制的(懒) # Redis configuration file example. ## Redis配置文件示例 # # Note that in order ...
- 一.Nginx的特性和一些知识点
一.Nginx的特性和一些知识点 1.基本功能服务器 处理静态文件(静态资源的web),支持 反向代理服务器,支持缓存.负载均衡.支持FastCGI 模块化机制,非DOS机制,支持 ...
- 加密解密以及CA签证
在当今互联网时代,数据越来越来重要.那么如何加密?解密?以及通过什么方式来认证了?? 接下来,我就会和大家谈谈加密,解密以及CA签证的实现. 首先大家的知道一些加密,解密的基本常识: 互联网上中间人一 ...
- color 颜色代码 android res/values/colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...
- Visual Studio 2015和.Net 2015 预览版在线安装和ISO镜像安装光盘下载
微软刚刚宣布了 Visual Studio 2015和.Net 2015 预览版,并同时提供了下载. 微软在纽约正进行中的#Connect# 全球开发者在线大会上宣布了Visual Studio 20 ...
- github项目filter_firewall说明
本文编写的目的: 本文是对上传到github上的项目进行说明.github链接:filter_firewall有任何意见或者建议可以Email:18277973721@sina.cn 项目介绍: 包过 ...
- Node.Js之【Stream 之复制文件问题】
var fs = require('fs'), path = require('path'), out = process.stdout; var filePath = 'F:/IMG_0221.MO ...