一、概述
1.1介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
1.2原理
如下图:
二、入门程序
2.1需要的jar包
2.2案例
实体类
package com.mybatis.pojo;
import java.util.Date;
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}
}
实体类的映射文件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">
<!--
namespace:1、分类化管理sql语句 2、用来通过代理开发dao
-->
<mapper namespace="test">
<!-- 根据id查询用户信息 -->
<!--
id:唯一标识,通过namespace和该值唯一确定一条sql语句
parameterType:传递的参数类型(输入映射的类型)
resultType:输出的结果类型(输出映射的类型)
#{}:代表占位符 如果我们传递的参数类型是java的基本类型, {}内的名称是任意的。
-->
<select id="queryUserById" parameterType="int" resultType="com.mybatis.pojo.User">
select * from user where id = #{id}
</select>
<!--根据用户名称查询用户信息 -->
<!--
resultType:只代表单条记录的结果类型
${}:代表连接符,它会将参数不做任何处理的拼接到sql语句中,如果传递的参数是java的基本类型,${}内的名称必须是value。
-->
<select id="queryUserByUserName" parameterType="String" resultType="com.mybatis.pojo.User">
select * from user where username like '%${value}%'
</select>
<!--添加用户信息 -->
<!--
#{}:代表占位符 如果我们传递的参数类型是见Pojo类型, {}内的名称是pojo的属性名称。
-->
<insert id="insertUser" parameterType="com.mybatis.pojo.User">
insert into user(username,sex,birthday,address)
values(#{username},#{sex},#{birthday},#{address})
</insert>
<!--更新用户信息 -->
<update id="updateUser" parameterType="com.mybatis.pojo.User">
update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address}
where id=#{id}
</update>
<!--删除用户信息 -->
<delete id="deleteUserById" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
mybatis的全局配置文件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"/>
<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>
<!-- 用来加载映射文件 -->
<mappers>
<mapper resource="com/mybatis/pojo/User.xml"/>
</mappers>
</configuration>
数据库配置文件:db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
测试类
package com.mybatis.demo;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.mybatis.pojo.User;
public class TestDemo {
@Test
public void testQueryUserById() throws IOException{
//加载全局配置文件
String resource="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
//获取会话工厂
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
SqlSessionFactory sf=sfb.build(inputStream);
//获取会话
SqlSession sqlSession = sf.openSession();
/**
* 根据id查询用户
* selectOne(String arg0, Object arg1)
* arg0表示要执行的sql,通过namespace.id来确定
* arg1表示要传递的参数
*/
User user = sqlSession.selectOne("test.queryUserById", 1);
System.out.println(user);
}
@Test
public void testQueryUserByUserName() throws IOException{
//加载全局配置文件
String resource="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
//获取会话工厂
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
SqlSessionFactory sf=sfb.build(inputStream);
//获取会话
SqlSession sqlSession = sf.openSession();
/**
* 根据用户名称查询用户
* selectOne(String arg0, Object arg1)
* arg0表示要执行的sql,通过namespace.id来确定
* arg1表示要传递的参数
*/
List<User> userList = sqlSession.selectList("test.queryUserByUserName", "张");
System.out.println(userList);
}
/**
* 新增用户信息
* @throws IOException
*/
@Test
public void testInsertUser() throws IOException{
//加载全局配置文件
String resource="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
//获取会话工厂
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
SqlSessionFactory sf=sfb.build(inputStream);
//获取会话
SqlSession sqlSession = sf.openSession();
User user=new User();
user.setUsername("tom");
user.setBirthday(new Date());
user.setAddress("北京");
user.setSex("1");
sqlSession.insert("test.insertUser", user);
//提交事务
sqlSession.commit();
sqlSession.close();
}
/**
* 根据id更新用户信息
* @throws IOException
*/
@Test
public void testUpdateUser() throws IOException{
//加载全局配置文件
String resource="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
//获取会话工厂
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
SqlSessionFactory sf=sfb.build(inputStream);
//获取会话
SqlSession sqlSession = sf.openSession();
User user=new User();
user.setId(1);
user.setUsername("tom");
user.setBirthday(new Date());
user.setAddress("上海");
user.setSex("0");
sqlSession.insert("test.updateUser", user);
//提交事务
sqlSession.commit();
sqlSession.close();
}
/**
* 根据id删除用户信息
* @throws IOException
*/
@Test
public void testDeleteUser() throws IOException{
//加载全局配置文件
String resource="SqlMapConfig.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
//获取会话工厂
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
SqlSessionFactory sf=sfb.build(inputStream);
//获取会话
SqlSession sqlSession = sf.openSession();
sqlSession.delete("test.deleteUserById",30);
//提交事务
sqlSession.commit();
sqlSession.close();
}
}
了解更多关注下方二维码