介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
一、创建项目与数据库
学习mybatis框架,创建项目可以是web项目也可以是java项目,测试数据库建表
二、导入jar包
使用mybatis框架,需要导入mybatis核心包、依赖包、数据驱动包
三、导入约束
导入mybatis的配置文件约束和映射文件约束
四、编写POJO类、Mapper.xml和Mybatis配置文件
1.编写POJO类
代码:
package com.xy.mybaits.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
public Integer getId() {
return id;
}
public void setId(Integer 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 + "]";
}
}
2.编写Mapper.xml和Mybatis配置文件
Mapper.xml映射文件,文件名为POJO类名,创建SqlMap包,存放映射文件。
映射文件中存放sql语句
<?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:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="test">
<select id="findUserById" parameterType="Integer"
resultType="com.xy.mybaits.pojo.User">
select * from user where id = #{v}
</select>
<select id="findUserByUsername" parameterType="String"
resultType="com.xy.mybaits.pojo.User">
select * from user where username like '%${value}%'
</select>
<insert id="saveUser" parameterType="com.xy.mybaits.pojo.User">
<selectKey order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>
<update id="updateUserById" parameterType="com.xy.mybaits.pojo.User" >
UPDATE user SET username = #{username},birthday = #{birthday}, sex = #{sex}, address = #{address} WHERE id = #{id}
</update>
<delete id="deleteUserById" parameterType="Integer">
delete from user where id = #{a}
</delete>
</mapper>
Mybatis配置文件,文件名必须为 SqlMapConfig.xml,文件位于src目录下,在配置文件中加载映射文件。
<?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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybaits?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="SqlMap/User.xml"/>
</mappers>
</configuration>
五、测试类代码实现
package com.xy.mybaits.Test;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
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.xy.mybaits.pojo.User;
public class mybaitsTest {
//根据id查询用户
@Test
public void fun1() throws IOException {
//1.加载SqlMapConfig.xml配置文件
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resource);
//4.创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.使用SqlSession对象执行查询,获得User
User user = sqlSession.selectOne("findUserById",1);
//6.提交事务
sqlSession.commit();
System.out.println(user);
//7.关闭资源
sqlSession.close();
}
//根据用户名称模糊查询用户列表
@Test
public void fun2() throws IOException {
//1.加载SqlMapConfig.xml配置文件
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resource);
//4.创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.使用SqlSession对象执行查询,获得User
List<User> list = sqlSession.selectList("findUserByUsername","五");
//6.提交事务
sqlSession.commit();
for (User user2 : list) {
System.out.println(user2);
}
//7.关闭资源
sqlSession.close();
}
//添加用户
// @Test
public void fun3() throws IOException {
//1.加载SqlMapConfig.xml配置文件
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resource);
//4.创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.使用SqlSession对象执行查询,获得User
User u = new User();
u.setUsername("金星");
u.setBirthday(new Date());
u.setSex("女");
u.setAddress("adfasdfa");
sqlSession.insert("saveUser", u);
//6.提交事务
sqlSession.commit();
//7.关闭资源
sqlSession.close();
}
//更新用户
@Test
public void fun4() throws IOException {
//1.加载SqlMapConfig.xml配置文件
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resource);
//4.创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.使用SqlSession对象执行查询,获得User
User uaer = new User();
uaer.setId(28);
uaer.setUsername("关羽");
uaer.setBirthday(new Date());
uaer.setSex("男");
uaer.setAddress("23333");
sqlSession.update("updateUserById", uaer);
//6.提交事务
sqlSession.commit();
//7.关闭资源
sqlSession.close();
}
//删除用户
@Test
public void fun5() throws IOException {
//1.加载SqlMapConfig.xml配置文件
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resource);
//4.创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.使用SqlSession对象执行查询,获得User
sqlSession.update("deleteUserById", 29);
//6.提交事务
sqlSession.commit();
//7.关闭资源
sqlSession.close();
}
}