一、Mybatis概述
MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO(Plain Old Java Object,普通Java对象)映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
二、准备工作
-
需要的jar包
mybatis核心包下载处
其他jar包下载处,自行搜索
使用MyBatis框架非常简单,只需在应用程序中引入MyBatis的核心包mybatis-3.4.2.jar和其它三个jar包就OK了 -
创建工程
在Eclipse中创建一个名为Mybatis-01的Dynamic Web Project项目,将前面准备的jar包一同添加到项目的lib目录下,并发布到类路径中
-
目录结构展示
三、MyBatis入门程序
1.建立MySQL数据库和表并插入几条数据
#创建db_mybatis数据库
create database db_mybatis;
use db_mybatis;
#创建user表
create table user(
id int primary key auto_increment,
username varchar(50),
jobs varchar(50),
phone varchar(50)
);
#添加数据
insert into user values(1,'allen','player','13544486483');
insert into user values(2,'kevin','student','15574222068');
insert into user values(3,'rose','teacher','15513515138');
2.导入log4j.properties文件
由于MyBatis默认使用log4j输出日志信息,因此如果要查看控制台的输出SQL语句,就需要在classpath路径下配置其日志文件。在项目的src目录下创建log4j.properties文件
#Global logging configuration
log4j.rootLogger = ERROR , STDOUT
#MyBatis logging configuration
log4j.logger.com.ssm=DEBUG
#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
3.创建实体类
在src目录下创建一个kevin.mybatis.pojo包,在该包下创建持久化类User,并在类中声明id、username、jobs和phone属性,及其对应的getter/setter法。
4.创建UserDao接口
在src目录下创建一个kevin.mybatis.dao包,并在包中创建UserDao接口
package kevin.mybatis.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import kevin.mybatis.pojo.User;
public interface UserDao {
//查询所有
List<User> findAllUser();
//通过id查询
User findUserById(int id);
//模糊查询
List<User> findUserByName(String name);
//添加用户
int addUser(User user);
//修改用户
int updateUser(User user);
//删除用户
int deleteUser(int id);
}
5.创建UserMapper.xml映射文件
在刚刚创建的kevin.mybatis.dao包下创建一个UserMapper.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属性:通过全限定类名找到你所创建的UserDao接口 -->
<mapper namespace="kevin.mybatis.dao.UserDao">
<!-- 查询所有 -->
<select id="findAllUser" resultType="kevin.mybatis.pojo.User">
select * from user
</select>
<!-- 通过id查询 -->
<select id="findUserById" parameterType="int" resultType="kevin.mybatis.pojo.User">
select * from user where id = #{id}
</select>
<!-- 模糊查询 -->
<select id="findUserByName" parameterType="string" resultType="kevin.mybatis.pojo.User">
select * from user where username like concat('%',#{username},'%')
</select>
<!-- 添加用户 -->
<insert id="addUser" parameterType="kevin.mybatis.pojo.User">
insert into user(username , jobs , phone)
values(#{username} , #{jobs} , #{phone})
</insert>
<!-- 修改用户 -->
<update id="updateUser" parameterType="kevin.mybatis.pojo.User">
update user set username = #{username} , jobs = #{jobs} , phone = #{phone} where id = #{id}
</update>
<!-- 通过id删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
<mapper>元素是配置文件的根元素,包含一个namespace属性,该属性为<mapper>元素指定了唯一的命名空间,通常会设置成“包名+SQL映射文件名”的形式。子元素<select>中的信息是用于执行查询操作的配置,其id属性是<select>元素在映射文件中的唯一标识;parameterType属性用于指定传入参数的类型;resultType属性用于指定返回结果的类型。
6.创建核心配置文件mybatis-config.xml
在src目录下创建MyBatis的核心配置文件mybatis-config.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>
<!-- 1.配置环境,默认的环境id为mysql -->
<environments default="mysql">
<!-- 2.配置id为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<!-- 驱动类 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- url -->
<property name="url" value="jdbc:mysql:///db_mybatis?characterEncoding=utf8"/>
<!-- mysql用户名 -->
<property name="username" value="root"/>
<!-- mysql密码 -->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 3.配置UserMapper的位置 -->
<mapper resource="kevin/mybatis/dao/UserMapper.xml"/>
</mappers>
</configuration>
7.创建核心对象
在src目录下创建一个kevin.mybatis.utils包,在该包下创建工具类MyBatisUtils
package kevin.mybatis.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtils {
//配置文件名
static String config = "mybatis-config.xml";
static SqlSession session;
static {
try {
//读取配置文件
InputStream in = Resources.getResourceAsStream(config);
//根据配置文件构建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//通过factory.openSession()创建SqlSession
session = factory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
//返回SqlSession对象
public static SqlSession createSqlSession() {
return session;
}
}
8.测试
在src目录下创建一个kevin.mybatis.test包,在该包下创建测试类MyBatisTest
package kevin.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
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 kevin.mybatis.pojo.User;
import kevin.mybatis.utils.MyBatisUtils;
public class MyBatisTest {
//查询所有
@Test
public void findAllTest() {
SqlSession session = MyBatisUtils.createSqlSession();
List<User> users = session.selectList("kevin.mybatis.dao.UserDao.findAllUser");
for (User user : users) {
System.out.println(user);
}
session.close();
}
//通过id查询
@Test
public void findUserByIdTest() {
SqlSession session = MyBatisUtils.createSqlSession();
User user = session.selectOne("kevin.mybatis.dao.UserDao.findUserById" , 2);
System.out.println(user);
session.close();
}
//模糊查询
@Test
public void findUserByNameTest() {
SqlSession session = MyBatisUtils.createSqlSession();
List<User> users = session.selectList("kevin.mybatis.dao.UserDao.findUserByName","n");
for (User user : users) {
System.out.println(user);
}
session.close();
}
//添加用户
@Test
public void addUserTest() {
SqlSession session = MyBatisUtils.createSqlSession();
User u = new User();
u.setJobs("singer");
u.setUsername("steven");
u.setPhone("135846897534");
int rows = session.insert("kevin.mybatis.dao.UserDao.addUser", u);
if(rows > 0) {
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
session.commit();
session.close();
}
//修改用户
@Test
public void updateUserTest() {
SqlSession session = MyBatisUtils.createSqlSession();
User u = new User();
u.setId(1);
u.setJobs("singer");
u.setUsername("bob");
u.setPhone("135846897534");
int rows = session.update("kevin.mybatis.dao.UserDao.updateUser", u);
if(rows > 0) {
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
session.commit();
session.close();
}
//修改用户
@Test
public void deleteUserTest() {
SqlSession session = MyBatisUtils.createSqlSession();
int id = 2;
int rows = session.delete("kevin.mybatis.dao.UserDao.deleteUser", id);
if(rows > 0) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
session.commit();
session.close();
}
/*注意:
其中操作insert、update、delete,需要提交事务,即session.commit();
如果不提交事务,并不会报错,但是数据不会改变
*/
}
9.结果