用到的相关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. Django 中间件实现用户认证与IP频率限制

    1.URL访问过滤 通过装饰器进行用户认证非常方便,但是在添加部分需要认证的功能时,就需要再次添加装饰器,如果通过中间件来实现,就不需要再进行添加的操作. import re LOGIN_URL = ...

  2. 小白学习css记录

    一.复习 什么是CSS? 层叠样式表 -层叠样式只会被覆盖而不会被替代 CSS的使用方式 style属性---> <h1 style="css属性"></h ...

  3. iOS线程和进程的区别和联系

    线程和进程的区别主要在于它们是不同的操作系统资源管理方式.进程有独立的地址空间,一个进程崩溃后,在保护模式的影响下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径.线程有自己的堆栈和局部变量 ...

  4. 常用APDU指令错误码

    状态码 性质 错误解释 9000 正常 成功执行 6200 警告 信息未提供 6281 警告 回送数据可能出错 6282 警告 文件长度小于Le 6283 警告 选中的文件无效 6284 警告 FCI ...

  5. Tomcat中server.xml文件内各节点详解

    由于 Tomcat 基于 Java,实际上在各种 Linux 发行版里的配置方法都大同小异,只是我看见在 Arch Linux 环境里搭建 Tomcat 的文章比较少,所以在 Arch Linux 实 ...

  6. jQuery Validate 无法验证 chosen-select元素

    chosen-select元素执行了chosen()方法后,为select元素加上了style="display: none;"进行隐藏,然后重新构造了一个看起来像select的下 ...

  7. VSTO 开发中 应用ActionPane、CustomTaskPane

    以Excel插件为例: 1. ActionPane 创建 ThisWorkbook 项目 private void ThisWorkbook_Startup(object sender, System ...

  8. Spring学习之-各注解的含义总结

    注解配置 @ComponentScan("spittr.web"):/在加载Spring上下文时,会扫描spittr.web包查找组件 @ComponentScan注解扫描的组件有 ...

  9. nginx限制IP恶意调用短信接口处理方法

    真实案例: 查看nginx日志,发现别有用心的人恶意调用API接口刷短信: /Jun/::: +] "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) ...

  10. 20140322 卡迪夫城VS利物浦,拔出重剑,有惊无险

    一.菱形442 起初在客战南安普顿的时候,罗杰斯启用了菱形442阵式,阵容和今天客战卡迪夫城几乎一样,只是格伦·约翰逊打左后卫,弗拉纳甘任职右后卫,目的是为了在客场抵御卢克·肖+拉拉纳.当时库蒂尼奥的 ...