MyBatis(1)
MyBatis简介
- 支持普通SQL查询、存储过程和高级映射的持久层框架
- 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索
- 使用简单的XML或注解用于配置和原始映射
- 用户无需关心底层数据库连接、数据访问和事务控制
SqlSessionFactory接口和SqlSession接口
1.sqlSessionFactoryBuilder
创建sqlSessionFactory,创建完就没用了。创建方式有2种:一个是通过XML配置文件的方式,一个是通过Configuration实例来完成。
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//sqlSessionFactory.getConfiguration().addMapper(IUser.class);
2.sqlSessionFactory(MyBatis的核心)
创建sqlSession对象,可以看做是数据库的连接池。
在一个MyBatis中以单例存在。
SqlSession session = sqlSessionFactory.openSession();
session.commit();
3.sqlSession
创建Mapper接口,相当于数据库连接对象(connection对象),可以在事务中执行多条SQL,通过commit、rollback等提交或回滚
4.Mapper
一个接口
代码实现(用Configure.xml的mapper映射)重点掌握
1.创建 Mybatis 配置文件Configure.xml:配置数据连接文件
重要的代码是<mapper resource="com/yiibai/mybatis/models/User.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>
<typeAliases>
<typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/yiibai" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yiibai/mybatis/models/User.xml" />
</mappers>
</configuration>
2.创建实体类User和映射文件User.xml
User:用户类,set()方法和get()方法
package com.yiibai.mybatis.models;
public class User {
private int id;
private String name;;
private String phone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
User.xml:写上SQL查询语句,注意select的id
<?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="com.yiibai.mybatis.models.UserMapper">
<select id="GetUserByID" parameterType="int" resultType="User">
select * from `user` where id = #{id}
</select>
</mapper>
3.主程序
import java.io.Reader;
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 com.yiibai.mybatis.models.*;
public class HelloWord {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
User user = (User) session.selectOne(
"com.yiibai.mybatis.models.UserMapper.GetUserByID", 1);
if(user!=null){
String userInfo = "名字:"+user.getName();
System.out.println(userInfo);
}
} finally {
session.close();
}
}
}
实现方法(用注解@)

1.创建 Mybatis 配置文件Configure.xml
删除代码<mapper resource="com/yiibai/mybatis/models/User.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>
<typeAliases>
<typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/yiibai" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<!--注释掉mapper
<mapper resource="com/yiibai/mybatis/models/User.xml" />-->
</mappers>
</configuration>
2.创建实体类User,无需User.xml了
User:用户类,set()方法和get()方法
package com.yiibai.mybatis.models;
public class User {
private int id;
private String name;;
private String phone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
3.建立接口类IUser,声明方法,在com.yiibai.mybatis.dao包下
package com.yiibai.mybatis.dao;
import org.apache.ibatis.annotations.Select;//注解
import com.yiibai.mybatis.models.User;
public interface IUser {
@Select("select * from user where id= #{id}")
public User getUserByID(int id);//和User.xml里面配置select的id一致<select id="getUserByID">,有注解映射时候不需要User.xml啦
}
4…主程序
import java.io.Reader;
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 com.yiibai.mybatis.dao.IUser;//接口
import com.yiibai.mybatis.models.*;
public class HelloWord {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
sqlSessionFactory.getConfiguration().addMapper(IUser.class);//mapper
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
/*
User user = (User) session.selectOne(
"com.yiibai.mybatis.models.UserMapper.GetUserByID", 1);
if(user!=null){
String userInfo = "名字:"+user.getName();
System.out.println(userInfo);
*/
IUser iuser = session.getMapper(IUser.class);
User user = iuser.getUserByID(1);
System.out.println("名字:"+user.getName());
}
} finally {
session.close();
}
}
}
增删改查
1.User类同上
2.Configure.xml同上,需要mapper映射到User.xml
<mappers>
<mapper resource="com/yiibai/mybatis/models/User.xml" />
</mappers>
3.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">
<mapper namespace="com.yiibai.mybatis.dao.IUser">
<select id="getUser" parameterType="int"
resultType="com.yiibai.mybatis.models.User">
SELECT *
FROM USER
WHERE id = #{userId}
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO USER(name,
dept, website,phone)
VALUES(#{name}, #{dept}, #{website}, #{phone})
</insert>
<select id="getUserList" resultType="com.yiibai.mybatis.models.User">
SELECT * FROM USER
</select>
<update id="updateUser" parameterType="User">
UPDATE USER
SET
name=
#{name},
dept = #{dept},
website = #{website},
phone = #{phone}
WHERE
id =
#{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM USER WHERE id = #{id}
</delete>
</mapper>
4.IUser接口
package com.yiibai.mybatis.dao;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.yiibai.mybatis.models.User;
public interface IUser {
//public User getUserByID(int id);
public List<User> getUserList();
public void insertUser(User user);
public void updateUser(User user);
public void deleteUser(int userId);
public User getUser(int id);
}
5.主程序
import java.io.Reader;
import java.text.MessageFormat;
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 com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.User;
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SqlSession session = sqlSessionFactory.openSession();
try {
//sqlSessionFactory.getConfiguration().addMapper(IUser.class);
//User user = (User) session.selectOne( "com.yiibai.mybatis.models.UserMapper.getUserByID", 1);
// 用户数据列表
getUserList();
// 插入数据
// testInsert();
// 更新用户
//testUpdate();
// 删除数据
//testDelete();
} finally {
session.close();
}
}
//
public static void testInsert()
{
try
{
// 获取Session连接
SqlSession session = sqlSessionFactory.openSession();
// 获取Mapper
IUser userMapper = session.getMapper(IUser.class);
System.out.println("Test insert start...");
// 执行插入
User user = new User();
user.setId(0);
user.setName("Google");
user.setDept("Tech");
user.setWebsite("http://www.google.com");
user.setPhone("120");
userMapper.insertUser(user);
// 提交事务
session.commit();
// 显示插入之后User信息
System.out.println("After insert");
getUserList();
System.out.println("Test insert finished...");
}
catch (Exception e)
{
e.printStackTrace();
}
}
// 获取用户列表
public static void getUserList() {
try {
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
// 显示User信息
System.out.println("Test Get start...");
printUsers(iuser.getUserList());
System.out.println("Test Get finished...");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testUpdate()
{
try
{
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
System.out.println("Test update start...");
printUsers(iuser.getUserList());
// 执行更新
User user = iuser.getUser(1);
user.setName("New name");
iuser.updateUser(user);
// 提交事务
session.commit();
// 显示更新之后User信息
System.out.println("After update");
printUsers(iuser.getUserList());
System.out.println("Test update finished...");
}catch (Exception e)
{
e.printStackTrace();
}
}
// 删除用户信息
public static void testDelete()
{
try
{
SqlSession session = sqlSessionFactory.openSession();
IUser iuser = session.getMapper(IUser.class);
System.out.println("Test delete start...");
// 显示删除之前User信息
System.out.println("Before delete");
printUsers(iuser.getUserList());
// 执行删除
iuser.deleteUser(2);
// 提交事务
session.commit();
// 显示删除之后User信息
System.out.println("After delete");
printUsers(iuser.getUserList());
System.out.println("Test delete finished...");
}catch (Exception e)
{
e.printStackTrace();
}
}
/**
*
* 打印用户信息到控制台
*
* @param users
*/
private static void printUsers(final List<User> users) {
int count = 0;
for (User user : users) {
System.out.println(MessageFormat.format(
"============= User[{0}]=================", ++count));
System.out.println("User Id: " + user.getId());
System.out.println("User Name: " + user.getName());
}
}
}
总结
1.User类
2.Configure.xml
- 可配置mapper:一种是通过XML配置文件的方式
<mapper resource="com/yiibai/mybatis/models/User.xml" />
.User.xml(配置mapper时候使用)
<select id="GetUserByID" parameterType="int" resultType="User">
select * from `user` where id = #{id}
</select>
- 可不配置mapper:一种是通过Configuration实例来完成,在主程序中
sqlSessionFactory.getConfiguration().addMapper(IUser.class);
IUser接口(不配置mapper时使用)
3.主程序