用到的相关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方法的更多相关文章

  1. mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)

    5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...

  2. 【MyBatis学习03】原始dao开发方法及其弊端

    上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使 ...

  3. MyBatis学习--mybatis开发dao的方法

    简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...

  4. 四 mybatis开发dao的方法

    mybatis开发dao的方法 1.1     SqlSession使用范围 1.1.1     SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  6. MyBatis 原始Dao开发方式

    原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 映射文件 <?xml version="1.0" encoding="UTF-8" ?> ...

  7. mybatis开发dao的方法——(三)

    ------------------------1.    SqlSession使用范围------------------- 1.1     SqlSessionFactoryBuilder 通过S ...

  8. mybatis学习记录二——mybatis开发dao的方法

    4.1     SqlSession使用范围 4.1.1     SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSession ...

  9. Mybatis学习记录(二)----mybatis开发dao的方法

    1  SqlSession使用范围 1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将Sq ...

随机推荐

  1. select获取选中项的值与文本

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. 移动端meta标签的使用和设置

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale= ...

  3. Windows API编程----枚举系统进程

    1.该函数可以检索系统中的每个进程的标识符(进程ID) BOOL WINAPI EnumProcesses( _Out_ DWORD *pProcessIds, _In_  DWORD cb, _Ou ...

  4. Linux符设备驱动编程

    加入内核源码树外 ① 建立两个文件scull.c,scull.h,以及Makefile文件 Makefile文件 ② 用make进行编译,生成scull.ko驱动程序模块 ③ 把scull.ko模块加 ...

  5. 微信小程序——组件(一)

    接着之前讲解的基础内容,应该对小程序有了一点了解.想深入了解的话,需要自己实际操作一遍比较好.首先了解官方给的组件,API等这样等顺序来比较好一些.下面贴两张demo图,demo的项目结构是设置的两个 ...

  6. phantomjs rendering

    http://wwwy3y3.ghost.io/pageres-phantomjs-capture-sreenshot-chinese-fonts-not-render-correctly/ 在使用中 ...

  7. SQL Server 2016 ->> T-SQL新特性

    1) TRUNCATE表分区而不是整表 CREATE TABLE dbo.TruncatePartitionTest ( PrtCol INT, Col2 ) ) ON [myPS1](PrtCol) ...

  8. SQL Server ->> 间接实现COUNT(DISTINCT XXX) OVER(PARTITION BY YYY)

    SQL Server 2005版本开始支持了窗口函数(Windowing Function)和OVER字句.SQL Server 2012版本开始支持了窗口函数的ORDER BY字句实现连续/累计聚合 ...

  9. windows下安装jmeter

    windows下安装jmeter post by rocdk890 / 2012-8-19 16:08 Sunday windows技术 发表评论 JMeter是Apache软件基金会的产品,用于对静 ...

  10. gulp 前端构建工具入门

    gulp 前端构建工具入门 标签(空格分隔): gulp 1. 安装gulp npm i -g gulp 2. 创建gulp项目 2.1 Hello world 使用npm init初始化项目文件夹. ...