mybatis在CRUD
一. 一个简短的引论:
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的更多相关文章
- MyBatis:CRUD功能
在前面已经自动生成了mapper和pojo,接下来我们实现mybatis的CRUD功能,先新建service.controller层的方法. 这里的sid是一个开源的id生成类,写完后,我们还需要在启 ...
- Mybatis的CRUD案例
一.Mybatis增删改查案例 上一节<Mybatis入门和简单Demo>讲了如何Mybatis的由来,工作流程和一个简单的插入案例,本节主要继上一讲完整的展示Mybatis的CRUD操作 ...
- 【MyBatis】MyBatis实现CRUD操作
1.实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现.根据之前的内容,要想实现CRUD,只需要进行映射文件的配置. 范例:修改EmpMapper.xml文件,实现CR ...
- SpringBoot 整合 Mybatis 进行CRUD测试开发
今天来和大家分享下 Spring Boot 整合 MyBatis 的 CRUD 测试方法开发.因为 MyBaits 有两种开发形式,一种基于注解,一种基于 xml . SpringBoot配置文件也有 ...
- 基于mybatis的CRUD
u 基于Mybatis的CRUD u 掌握MyBatis的结果类型-resultMap和resultType u 掌握MyBatis的参数类型 u 掌握#和$两种语法 1 基于myb ...
- 05 Mybatis的CRUD操作和Mybatis连接池
1.CRUD的含义 CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写.主要被用在描述软件系统中 ...
- 03 Mybatis:05.使用Mybatis完成CRUD
mybatis框架:共四天 明确:我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式.不管使用XML还是注解配置. 第二天:mybatis基本使用 mybatis的单表crud操作 ...
- mybatis(CRUD)
3.mybatis(CRUD) 有了mybatis,我们要对数据库进行增删改查只需要操作接口和mapper.xml文件,然后进行测试就可以了. 实例代码如下: 接口 public interface ...
- MyBatis之CRUD
1 mybatis框架介绍 1.1回顾jdbc操作数据库的过程 1.2 mybatis开发步骤 A.提供一个SqlMapperConfig.xml(src目录下),该文件主要配置数据库连接,事务,二级 ...
- MyBatis Tutorial – CRUD Operations and Mapping Relationships – Part 1---- reference
http://www.javacodegeeks.com/2012/11/mybatis-tutorial-crud-operations-and-mapping-relationships-part ...
随机推荐
- Android检测网络状态,判断当前网络是否可用
用户手机当前网络可用:WIFI.2G/3G网络,用户打开与不打开网络,和是否可以用是两码事.可以使用指的是:用户打开网络了并且可以连上互联网进行上网. 检测当前网络是否可用,代码如下: /** * 检 ...
- FindBug:Call to static DateFormat
今天在重构代码的过程中碰到了一个问题.使用SimpleDateFormat的问题. 本人今天写了一个类,主要是提供很多静态的方法由其他接口调用,过程中多个方法使用到了日期的格式化,所以我讲Simple ...
- [Angular] Setup automated deployment with Angular, Travis and Firebase
Automate all the things!! Automation is crucial for increasing the quality and productivity. In this ...
- 支付宝支付返回通知时 notify_url和return_url的选择
页面跳转同步通知页面特性(return_url特性) 买家在支付成功后会看到一个支付宝交易提示成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url) 该页面中 ...
- 前端实时消息提示的效果-websocket长轮询
WebSocket是html5新增加的特性之一,可以实现客户端和服务器彼此之间相互通信,也可以实现跨域通信,目前大部分主流浏览器都支持,iE浏览器需要10版本以上. 需求:公司项目有一个报警模块,当后 ...
- like小计
1.有索引的列最好进行 ‘aa%’形式可以使用一些索引. 2.如果非得进行 ‘%aa%’这种类型查询,那这个条件不要进行主要过滤条件. 意思是这个列如果有索引就不能用索引,即使用了,索引页是进行对整个 ...
- 【u251】心灵的抚慰
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 病毒问题解决后,神牛们的心灵久久不能平静.他可以从一个程序联想到一些相似的程序.比如从程序1联想到2, ...
- css3-11 如何改变背景图片的大小和位置
css3-11 如何改变背景图片的大小和位置 一.总结 一句话总结:css3相对css2本身就支持改变背景图片的大小和位置. 1.怎么设置背景不填充padding部分? background-orig ...
- Java 网络I/O模型
网络I/O模型 人多了,就会有问题.web刚出现的时候,光顾的人很少.近年来网络应用规模逐渐扩大,应用的架构也需要随之改变.C10k的问题,让工程师们需要思考服务的性能与应用的并发能力. 网络应用需要 ...
- 关于右移和除法的关系 , ADC采集电量 ,ADC采集MIC(麦克风)
//////////////////////////////////////////////////////////////////////////////////////////////////// ...