一. 一个简短的引论:

Mybatis本是apache的一个开源项目ibatis, 2010年这个项目由apache software foundation迁移到了google code, 而且改名为Mybatis.

Mybatis是一个基于Java的持久层框架.

二. 增删改查:

1. 代码结构图:

2. User实体类:

/**
* User实体类
*/
public class User { private String id;
private String uname; // 注意: 该字段名称与数据库字段不一致
private String address; @Override
public String toString() {
return "{id: " + id + ", uname: " + uname + ", address: " + address + "}";
} }

// 省略getter和setter方法

3. 实体映射文件: User.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.zdp.domain.User"> <!-- 数据库字段与实体字段相应 -->
<resultMap type="User" id="userBean">
<id column="id" property="id"/>
<result column="username" property="uname"/>
<result column="address" property="address"/>
</resultMap> <!-- 查: 查询全部User -->
<select id="selectAllUsers" resultMap="userBean">
select id, username, address from user
</select> <!-- 查: 依据id查询User, 返回值为userBean -->
<!-- id:当前sql语句的唯一标识, parameterType:參数类型, resultType:返回值类型 -->
<select id="selectUserById" parameterType="string" resultMap="userBean">
select * from user where id = #{userid}
</select> <!-- 查: 依据id查询User, 返回值为HashMap -->
<select id="selectUserByIdForMap" parameterType="string" resultType="hashmap">
select id, username, address from user where id = #{userid}
</select> <!-- 增: 插入User, 參数为userBean(调用getter方法获取參数值) -->
<insert id="insertUser" parameterType="User">
insert into user(id, username, address) values (#{id}, #{uname}, #{address});
</insert> <!-- 增: 插入User, 參数为hashmap(调用userMap.get(key)获取參数) -->
<insert id="insertUserForMap" parameterType="hashmap">
insert into user(id, username, address) values (#{id}, #{uname}, #{address});
</insert> <!-- 删: 依据id删除User, 參数为userId -->
<delete id="deleteUserById" parameterType="string">
delete from user where id = #{userid}
</delete> <!-- 改: 依据id更新User, 參数为userBean(调用getter方法获取參数值) -->
<update id="updateUserById" parameterType="User">
update user set username = #{uname}, address = #{address} where id = #{id}
</update> <!-- 改: 依据id更新User, 參数为map(调用userMap.get(key)获取參数) -->
<update id="updateUserByIdForMap" parameterType="hashmap">
update user set username = #{uname}, address = #{address} where id = #{id}
</update> <!-- 查: 动态sql: 使用 "where 1=1" -->
<select id="selectUserByCondition1" parameterType="User" resultMap="userBean">
select id, username, address from user where 1=1
<if test="id != null">
and id = #{id}
</if>
<!-- uname指的是实体的属性 -->
<if test="uname != null">
and username = #{uname}
</if>
<if test="address != null">
and address = #{address}
</if>
</select> <!-- 查: 动态sql: 使用where标签 -->
<select id="selectUserByCondition2" parameterType="User" resultMap="userBean">
select id, username, address from user
<where>
<if test="id != null">
id = #{id}
</if>
<!-- uname指的是实体的属性 -->
<if test="uname != null">
and username = #{uname}
</if>
<if test="address != null">
and address = #{address}
</if>
</where>
</select> </mapper>

4. 全局配置文件:sqlMapConfig.xml

<?

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>
<typeAliases>
<typeAlias type="com.zdp.domain.User" alias="User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射文件的位置 -->
<mapper resource="com/zdp/domain/User.xml" />
</mappers>
</configuration>

typeAliases: 为java类型指定别名, 能够再xml文件里用别名替代java类的全限定名.

5. sql文件:

CREATE DATABASE test;  

USE test;  

CREATE TABLE USER(
id VARCHAR(36) PRIMARY KEY,
username VARCHAR(64),
address VARCHAR(128)
) INSERT INTO USER (id, username, address) VALUES("001", "zhangsan", "Wuhan");
INSERT INTO USER (id, username, address) VALUES("002", "lisi", "Shanghai");

6. log4j

log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

7. 測试文件:

/**
* 測试mybatis - user增删改查
*/
public class UserTest { private SqlSessionFactory ssf; @Before
public void initSF() throws Exception {
String resource = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
ssf = new SqlSessionFactoryBuilder().build(inputStream);
} // 查询全部User
@Test
public void testSelectAllUsers() throws Exception {
SqlSession session = ssf.openSession();
List<User> users = session.selectList("com.zdp.domain.User.selectAllUsers");
for (User user : users) {
System.out.println(user);
}
} // 依据id查询User, 返回值为userBean
@Test
public void testSelectUserById() throws Exception {
SqlSession session = ssf.openSession();
User user = session.selectOne("com.zdp.domain.User.selectUserById", "001");
System.out.println(user);
} // 依据id查询User, 返回值为HashMap
@Test
public void testSelectUserByIdForMap() throws Exception {
SqlSession session = ssf.openSession();
Map<String, Object> userMap = session.selectOne("com.zdp.domain.User.selectUserByIdForMap", "001");
System.out.println(userMap);
} // 插入User, 參数为userBean
@Test
public void testInsertUser() throws Exception {
SqlSession session = ssf.openSession(); // 构建实体
User user = new User();
user.setId("003");
user.setUname("wangwu");
user.setAddress("beijing"); int i = session.insert("com.zdp.domain.User.insertUser", user);
// 提交事务
session.commit();
} // 插入User, 參数为hashmap
@Test
public void testInsertUserForMap() throws Exception {
SqlSession session = ssf.openSession();
Map<String, Object> userMap = new HashMap<String, Object>();
userMap.put("id", "004");
userMap.put("uname", "zhaoliu");
userMap.put("address", "tianjin"); int i = session.insert("com.zdp.domain.User.insertUserForMap", userMap);
session.commit();
} // 依据id删除User, 參数为userId
@Test
public void testDeleteUserById() throws Exception {
SqlSession session = ssf.openSession();
int i = session.delete("com.zdp.domain.User.deleteUserById", "004");
session.commit();
} // 依据id更新User, 參数为userBean
@Test
public void testUpdateUserById() throws Exception {
SqlSession session = ssf.openSession(); User user = new User();
user.setId("001");
user.setUname("zhangsanf");
user.setAddress("wuhan"); int i = session.update("com.zdp.domain.User.updateUserById", user);
session.commit();
} // 依据id更新User, 參数为hashMap
@Test
public void testUpdateUserByIdForMap() throws Exception {
SqlSession session = ssf.openSession();
Map<String, Object> userMap = new HashMap<String, Object>(); userMap.put("id", "001");
userMap.put("uname","zhangsan");
userMap.put("address", "beijing"); int i = session.update("com.zdp.domain.User.updateUserByIdForMap", userMap);
session.commit();
} // 动态条件查询:
@Test
public void testSelectUserByCondition() throws Exception {
SqlSession session = ssf.openSession(); User user = new User();
user.setUname("lisi");
List<User> users = session.selectList("com.zdp.domain.User.selectUserByCondition1", user);
// List<User> users = session.selectList("com.zdp.domain.User.selectUserByCondition2", user); for (User u : users) {
System.out.println(u);
}
}
}

SqlSessionFactory是一个创建SqlSession的工厂类, 通过SqlSession实例, 开发人员可以直接进行业务逻辑的操作, 二不须要反复编写JDBC相关的模板代码.

版权声明:本文博主原创文章,博客,未经同意不得转载。

mybatis在CRUD的更多相关文章

  1. MyBatis:CRUD功能

    在前面已经自动生成了mapper和pojo,接下来我们实现mybatis的CRUD功能,先新建service.controller层的方法. 这里的sid是一个开源的id生成类,写完后,我们还需要在启 ...

  2. Mybatis的CRUD案例

    一.Mybatis增删改查案例 上一节<Mybatis入门和简单Demo>讲了如何Mybatis的由来,工作流程和一个简单的插入案例,本节主要继上一讲完整的展示Mybatis的CRUD操作 ...

  3. 【MyBatis】MyBatis实现CRUD操作

    1.实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现.根据之前的内容,要想实现CRUD,只需要进行映射文件的配置. 范例:修改EmpMapper.xml文件,实现CR ...

  4. SpringBoot 整合 Mybatis 进行CRUD测试开发

    今天来和大家分享下 Spring Boot 整合 MyBatis 的 CRUD 测试方法开发.因为 MyBaits 有两种开发形式,一种基于注解,一种基于 xml . SpringBoot配置文件也有 ...

  5. 基于mybatis的CRUD

    u  基于Mybatis的CRUD u  掌握MyBatis的结果类型-resultMap和resultType u  掌握MyBatis的参数类型 u  掌握#和$两种语法 1      基于myb ...

  6. 05 Mybatis的CRUD操作和Mybatis连接池

    1.CRUD的含义 CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写.主要被用在描述软件系统中 ...

  7. 03 Mybatis:05.使用Mybatis完成CRUD

    mybatis框架:共四天 明确:我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式.不管使用XML还是注解配置. 第二天:mybatis基本使用 mybatis的单表crud操作 ...

  8. mybatis(CRUD)

    3.mybatis(CRUD) 有了mybatis,我们要对数据库进行增删改查只需要操作接口和mapper.xml文件,然后进行测试就可以了. 实例代码如下: 接口 public interface ...

  9. MyBatis之CRUD

    1 mybatis框架介绍 1.1回顾jdbc操作数据库的过程 1.2 mybatis开发步骤 A.提供一个SqlMapperConfig.xml(src目录下),该文件主要配置数据库连接,事务,二级 ...

  10. MyBatis Tutorial – CRUD Operations and Mapping Relationships – Part 1---- reference

    http://www.javacodegeeks.com/2012/11/mybatis-tutorial-crud-operations-and-mapping-relationships-part ...

随机推荐

  1. [D3] Create DOM Elements with D3 v4

    Change is good, but creating from scratch is even better. This lesson shows you how to create DOM el ...

  2. springMVC easyUI filebox 单个文件上传

    被这个文件上传坑到如今.还是自己技术问题,照着之前extjs项目那边的上传实例,愣是上传不了 到后面就查了下springMVC的文件上传,依照那样搞定了http://blog.csdn.net/jad ...

  3. 使用四种框架分别实现百万websocket常连接的服务器--转

    原文地址:http://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/#Nett ...

  4. 【Codeforces Round #440 (Div. 2) C】 Maximum splitting

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定用尽量多的4最好. 然后对4取模的结果 为0,1,2,3分类讨论即可 [代码] #include <bits/stdc++ ...

  5. Spring 使用Cache(转)

    从3.1开始Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事物管理的支持.Spring Cache是作用在方法上的,其核心思想是:当我们在调用一个缓存方法时会把该方法参数 ...

  6. [Node] Setup an Nginx Proxy for a Node.js App

    Learn how to setup an Nginx proxy server that sits in front of a Node.js app. You can use a proxy to ...

  7. [AngularFire 2] Object Observables - How to Read Objects from a Firebase Database?

    In this lesson we are going to learn how to use AngularFire 2 to query objects, and read them from t ...

  8. Java反射学习总结一(基础篇)

    Class类是Reflection API中核心的类,他位于Java.lang.Class 列出一些常用的方法. - getName() : 获得类的完整名字 - getFields() : 获得类的 ...

  9. 数据结构与算法实验题 7.1 M 商人的求救

    问题描述: A 国正面临着一场残酷的战争,城市被支持不同领导的两股势力占据,作为一个商人,M先生并不太关心政治,但是他知道局势很严重,他希望你能救他出去.M 先生说:"为了安全起见,我们的路 ...

  10. MinGW、MinGW-w64 与TDM-GCC 应该如何选择?

    MinGW.MinGW-w64 与TDM-GCC 应该如何选择? https://www.zhihu.com/question/39952667