Mybatis 原始dao CRUD方法
用到的相关jar包及所用版本如下:
其中的Mybatis可以到github.com的网站下载
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.swift</groupId>
<artifactId>mybatis02</artifactId>
<version>0.0.1-SNAPSHOT</version> <dependencies>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency> <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
使用mysql数据库进行测试
为了方便修改数据库参数,使用了db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
在Mybatis的配置文件中加载这个properties
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>
<!-- 外部引入的配置信息优先级高于子标签定义的配置信息 -->
<properties resource="db.properties">
<!-- <property name="jdbc.username" value="root" /> -->
</properties> <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> <!-- 加载sql映射文件 -->
<mappers>
<mapper resource="sqlmap/UserMapper.xml" />
</mappers>
</configuration>
此时项目的结构如下

与Hibernate的纯orm映射(把实体映射成数据库表,并且表与表的关系也映射了,基本上完全封装了sql)不同,
Mybatis的映射文件是要自己写SQL的,而不是由Hibernate自动生成
纯洁的pojo实体类
package com.swift.pojo; import java.io.Serializable;
import java.util.Date; public class User
implements Serializable
{
private static final long serialVersionUID = 1L;
private String uid;
private String username;
private String password;
private String name;
private String email;
private String telephone;
private Date birthday;
private String gender;
private int state;
private String code; public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getUid()
{
return this.uid;
} public void setUid(String uid)
{
this.uid = uid;
} public String getUsername()
{
return this.username;
} public void setUsername(String username)
{
this.username = username;
} public String getPassword()
{
return this.password;
} public void setPassword(String password)
{
this.password = password;
} public String getName()
{
return this.name;
} public void setName(String name)
{
this.name = name;
} public String getEmail()
{
return this.email;
} public void setEmail(String email)
{
this.email = email;
} public String getTelephone()
{
return this.telephone;
} public void setTelephone(String telephone)
{
this.telephone = telephone;
} public int getState()
{
return this.state;
} public void setState(int state)
{
this.state = state;
} public String getCode()
{
return this.code;
} public void setCode(String code)
{
this.code = code;
} public String getGender()
{
return this.gender;
} public void setGender(String gender)
{
this.gender = gender;
} @Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", name=" + name + ", email="
+ email + ", telephone=" + telephone + ", birthday=" + birthday + ", gender=" + gender + ", state=" + state
+ ", code=" + code + "]";
} }
Mybatis 的sql映射文件 只是写了SQL语言的CRUD
通过这个映射UserMapper.xml文件 可以对User这个pojo类进行相关操作
<?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="test"> <!-- resultType:返回多条记录时配置和单条一样,mybatis会自动把多条数据放到集合里面 -->
<select id="queryUserByUsername" parameterType="String"
resultType="com.swift.pojo.User">
select * from user where username = #{username}
</select>
<select id="queryUserByTelephone" parameterType="String"
resultType="com.swift.pojo.User">
select * from user where telephone like #{telephone}
</select>
<select id="queryUserByTelephone2" parameterType="String"
resultType="com.swift.pojo.User">
select * from user where telephone like '%${value}%'
</select> <insert id="saveUser" parameterType="com.swift.pojo.User">
INSERT INTO
USER(uid,username,password,name)
VALUES(#{uid},#{username},#{password},#{name})
</insert> <update id="updateUserById" parameterType="com.swift.pojo.User">
UPDATE USER SET birthday = #{birthday} WHERE uid = #{uid}
</update> </mapper>
那么如何调用这个映射文件中的crud sql配置呢?Mybatis原始的dao的方法需要我们建立pojo的dao接口和实现类,来调用映射文件中sql配置
Dao接口 UserDao.java
package com.swift.dao;
import java.util.List;
import com.swift.pojo.User;
public interface UserDao {
User queryUserByUsername(String username);
List<User> queryUserByTelephone(String telephone);
List<User> queryUserByTelephone2(String telephone);
void saveUser(User user);
void updateUserById(User user);
}
实体类
package com.swift.dao; import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory; import com.swift.pojo.User; public class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
} public User queryUserByUsername(String username) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.queryUserByUsername", username);
sqlSession.close();
return user;
} public List<User> queryUserByTelephone(String telephone) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> users = sqlSession.selectList("test.queryUserByTelephone", telephone);
sqlSession.close();
return users;
} public List<User> queryUserByTelephone2(String telephone) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> users = sqlSession.selectList("test.queryUserByTelephone2", telephone);
sqlSession.close();
return users;
} public void saveUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("test.saveUser", user);
sqlSession.close();
} public void updateUserById(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.update("test.updateUserById", user);
sqlSession.close();
} }
测试类
package com.swift.test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.swift.dao.UserDao;
import com.swift.dao.UserDaoImpl;
import com.swift.pojo.User; public class UserDaoTest {
private SqlSessionFactory sqlSessionFactory; @Test
public void testQueryUserById() throws IOException {
// 创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 加载SqlMapConfig.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建SqlsessionFactory
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 创建DAO
UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
// 执行查询
User user = userDao.queryUserByUsername("swift");
System.out.println(user);
}
@Test
public void testQueryUserByTelephone() throws IOException {
// 创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 加载SqlMapConfig.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建SqlsessionFactory
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 创建DAO
UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
// 执行查询
List<User> users = userDao.queryUserByTelephone("%186%");
for (User user : users) {
System.out.println(user);
}
}
}

为了能看到结果
还要有个log日志文件log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
Mybatis 原始dao CRUD方法的更多相关文章
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)
5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...
- 【MyBatis学习03】原始dao开发方法及其弊端
上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使 ...
- MyBatis学习--mybatis开发dao的方法
简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...
- 四 mybatis开发dao的方法
mybatis开发dao的方法 1.1 SqlSession使用范围 1.1.1 SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...
- MyBatis 原始Dao开发方式
原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 映射文件 <?xml version="1.0" encoding="UTF-8" ?> ...
- mybatis开发dao的方法——(三)
------------------------1. SqlSession使用范围------------------- 1.1 SqlSessionFactoryBuilder 通过S ...
- mybatis学习记录二——mybatis开发dao的方法
4.1 SqlSession使用范围 4.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSession ...
- Mybatis学习记录(二)----mybatis开发dao的方法
1 SqlSession使用范围 1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将Sq ...
随机推荐
- JavaScript AMD 与CMD的代码区别
1:CMD 依赖就近 define(function(require,export) { var b =1; var a = require("../a"); a.dosometh ...
- js和.net后台交互
1.asp.net呼叫js Response.Write("<script language=javascript>"); ...
- response.setHeader()下载的用法
1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...
- 2-2 Sass的函数功能-字符串与数字函数
Sass的函数简介 在 Sass 中除了可以定义变量,具有 @extend.%placeholder 和 mixins 等特性之外,还自备了一系列的函数功能.其主要包括: 字符串函数 数字函数 列表函 ...
- 2-1 Sass的控制命令
@if @if 指令是一个 SassScript,它可以根据条件来处理样式块,如果条件为 true 返回一个样式块,反之 false 返回另一个样式块.在 Sass 中除了 @if 之,还可以配合 @ ...
- echarts 表格与 div 之间 空白的设置
一. options 图表选项,包含图表实例任何可配置选项: 公共选项 , 组件选项 , 数据选项 {Object} grid 二. grid 直角坐标系内绘图网格 名称 默认值 描述 {number ...
- awk日志分析
前言 今天我们来讲讲如何用awk进行网站日志分析,得到页面平均耗时排行 文件 [xingxing.dxx@30_28_6_20 ~]$ cat logs /Oct/::: +] GET /pages/ ...
- 02_dubbo的SPI
[dubbo为什么不采用JDK自带的SPI] 1.JDK自带的SPI(ServiceLoader)会一次性实例化扩展点所有实现,基本只能通过遍历全部获取,也就是接口的实现类全部加载并实例化一遍,如果我 ...
- Tesseract-OCR-02-Tesseract-OCR 的安装与 环境变量配置
Windows 下 Tesseract-OCR 的安装与 环境变量配置 本篇介绍Windows下Tesseract-OCR的安装与环境配置,然后做一个图片的文字识别测试 Windows下 Tesser ...
- 【Udacity】机器学习性能评估指标
评估指标 Evaluation metrics 机器学习性能评估指标 选择合适的指标 分类与回归的不同性能指标 分类的指标(准确率.精确率.召回率和 F 分数) 回归的指标(平均绝对误差和均方误差) ...