开发MyBatis入门程序
MyBatis本是Apache的一个开源项目ibatis,2010年这个项目由Apache Software Foundation迁移到Google Code,并改名为MyBatis.
MyBatis是一个基于Java的持久性框架,MyBatis提供的持久性框架包括SQL Maps和Data Access Objects,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或者注解用于配置和原始映射,将接口和Java的POJOs映射成数据库的记录。
目前,Java的持久层框架产品有很多,常见的有Hibernate和MyBatis,MyBatis是一个半自动的映射框架,因为MyBatis需要手动匹配POJO,SQL和关系映射,而Hibernate是一个全面映射的框架,只需要提供POJO和映射关系即可。MyBatis是一个小巧,方便,高效,简单,直接,半自动化的持久层框架,HIbernate是一个强大,方便,高效,复杂,间接,全自动的持久层框架。
MyBatis的工作原理
(1)读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息
(2)加载映射文件:映射文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在MyBatis配置文件myBatis-config.xml中加载,每个文件对应数据库中的一张表
(3)构造会话工厂:通过MyBatis的运行环境等配置信息构建会话工厂SqlSessionFactory
(4)创建会话对象:由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法
(5)Executor执行器:MyBatis底层定义一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态的生成需要执行的SQL语句
(6)MappedStatement对象:在Executor接口执行方法有一个MappedStatement类型的参数对象,该参数是对映射信息的封装,主要存储要映射的SQL语句的id,参数等信息。
(7)输入参数映射:输入参数类型可以是Map,List等集合类型,也可以是基本数据类型和POJO类型
(8)输出参数映射:输出结果类型可以是Map,List等集合,也可以是基本数据类型和POJO类型
1-使用Eclipse开发MyBatis入门程序
1.创建Web应用,并添加相关jar包,在Eclipse中创建名为ch6的web应用,将MyBatis的核心JAR包,依赖jar包,以及数据库的驱动jar包一起赋值到/WEB-INF/lib目录下
2.创建日志文件,MyBatis默认使用log4j输出日志信息,如果开发者需要查看控制台输出的SQL语句,那么需要在classpath路径下配置其日志文件,在ch6应用的src目录下创建log4j.properties文件
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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.在MySQL数据库中创建数据库spring,并在该数据库中常见用户表user,字符串的编码选择utf8的编码格式。在该表中录入四行数据。
4.创建持久化类,在src目录下创建一个名为com.mybatis.po的包,在该包中创建持久化类MyUser,在类中声明的属性与数据表user中的一致。
public class MyUser {
private Integer uid ; //主键
private String uname ;
private String usex ;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUsex() {
return usex;
}
public void setUsex(String usex) {
this.usex = usex;
}
public String toString() {
return "User " + " uid = " + uid + " uname = " + uname + " usex = " + usex ;
}
}
5.创建映射文件,在src目录下创建一个名为com.mybatis.mapper的包,在该包中创建映射文件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">
<mapper namespace="com.mybatis.mapper.UserMapper">
<!-- 根据uid查询一个用户的信息 -->
<select id="selectUserById" parameterType = "Integer"
resultType="com.mybatis.po.MyUser">
select * from user where uid = #{uid}
</select>
<!--查询所有用户信息-->
<select id = "selectAllUser" resultType="com.mybatis.po.MyUser">
select * from user
</select>
<!--添加一个用户-->
<insert id = "addUser" parameterType = "com.mybatis.po.MyUser">
insert into user (uid, uname, usex) values (#{uid},#{uname},#{usex})
</insert>
<!--修改一个用户-->
<update id = "updateUser" parameterType = "com.mybatis.po.MyUser">
update user set uname = #{uname}, usex = #{usex} where uid = #{uid}
</update>
<!--删除一个用户-->
<delete id = "deleteUser" parameterType = "Integer">
delete from user where uid = #{uid}
</delete>
</mapper>
6.创建MyBatis的配置文件,在src目录下创建MyBatis的核心配置文件mybatis-cofig.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>
<!--配置环境-->
<environments default="development">
<environment id = "development">
<!--使用JDBC进行事务管理-->
<transactionManager type = "JDBC"/>
<dataSource type = "POOLED">
<!--MySQL数据库驱动-->
<property name = "driver" value = "com.mysql.jdbc.Driver"/>
<!--连接数据库的url-->
<property name = "url" value = "jdbc:mysql://localhost:3306/spring?characterEncoding=utf8"/>
<property name = "username" value = "root"/>
<property name = "password" value = "123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--映射文件的位置-->
<mapper resource = "com/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
7.创建测试类,在src目录下创建一个名为com.mybatis.test的包,在该包中创建MyBatisTest测试类,在测试类中首先使用输入流读取配置文件,然后根据配置文件信息构建SqlSessionFactory对象,然后根据SqlSessionFactory对象创建SqlSession对象,并对SqlSession对象的方法进行数据库操作
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 com.mybatis.po.MyUser;
public class MyBatisTest {
public static void main(String[] args) {
try {
//读取配置文件mybatis-config.xml
InputStream config = Resources.getResourceAsStream("mybatis-config.xml") ;
//根据配置文件构建SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config) ;
//根据SqlSessionFactory构建SqlSession
SqlSession ss = ssf.openSession();
//SqlSession执行映射文件中定义的SQL,并返回映射结果
//删除一个用户 ss.delete("com.mybatis.mapper.UserMapper.deleteUser",4) ;
//查询一个用户
MyUser myUser = ss.selectOne("com.mybatis.mapper.UserMapper.selectUserById",1) ;
System.out.println(myUser);
//添加一个用户
MyUser addmu = new MyUser() ;
addmu.setUid(4);
addmu.setUname("王国栋") ;
addmu.setUsex("男") ; ss.insert("com.mybatis.mapper.UserMapper.addUser",addmu) ;
//修改一个用户
MyUser updatemu = new MyUser() ;
updatemu.setUid(1);
updatemu.setUname("张珂珂") ;
updatemu.setUsex("男");
ss.update("com.mybatis.mapper.UserMapper.updateUser",updatemu) ;
//查询所有用户
List<MyUser> listMu = ss.selectList("com.mybatis.mapper.UserMapper.selectAllUser") ;
for(MyUser m : listMu) {
System.out.println(m);
}
//提交事务
ss.commit() ;
ss.close();
}catch(IOException e) {
e.printStackTrace() ;
}
}
}
8.控制台输出结果
9.数据库结果
2-使用IDEA开发MyBatis入门程序
1.创建一个名为ch6的maven项目,该项目的目录结构如下:
2.在pom.xml配置文件所需的jar包,并提示编译器src/main/java目录下有xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>ch6</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!--MyBatis的jar包配置-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- mysql驱动包的配置 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
</dependencies>
<!-- 配置以下信息,是src/main/java目录下有xml文件-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
3.pom.xml文件配置完成后,需要Reimport一下,将这些jar自动导入。
4.创建日志文件,MyBatis默认使用log4j输出日志信息,如果开发者需要查看控制台输出的SQL语句,那么需要在classpath路径下配置其日志文件,在ch6应用的src/main/resources目录下创建log4j.properties文件
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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
5.在MySQL数据库中创建数据库spring,并在该数据库中常见用户表user,字符串的编码选择utf8的编码格式。在该表中录入四行数据。
6.在src/main/java目录下,创建一个名为com.mybatis.po的包,在该包中创建持久化类MyUser,在该类中声明的属性与数据表user中的属性一致
public class MyUser {
private Integer uid ; //主键
private String uname ;
private String usex ;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUsex() {
return usex;
}
public void setUsex(String usex) {
this.usex = usex;
}
public String toString() {
return "User " + " uid = " + uid + " uname = " + uname + " usex = " + usex ;
}
}
7.在src/main/java目录下,创建一个名为com.mybatis.mapper包,在该包中创建映射文件UserMapper.xml
在下述映射文件中,mapper元素是配置文件的根元素,它包含了namespqce属性,该属性值通常设置为“包名+SQL映射文件名”,指定了唯一的命名空间,子元素select,insert,update,delete中的信息是用于执行查询,插入,修改,删除操作的配置,在定义的SQL语句中#{}表示一个占位符,#{uid}表示该占位符接收的参数的名称为uid
<?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.mybatis.mapper.UserMapper">
<!-- 根据uid查询一个用户的信息 -->
<select id="selectUserById" parameterType = "Integer"
resultType="com.mybatis.po.MyUser">
select * from user where uid = #{uid}
</select>
<!--查询所有用户信息-->
<select id = "selectAllUser" resultType="com.mybatis.po.MyUser">
select * from user
</select>
<!--添加一个用户-->
<insert id = "addUser" parameterType = "com.mybatis.po.MyUser">
insert into user (uid, uname, usex) values (#{uid},#{uname},#{usex})
</insert>
<!--修改一个用户-->
<update id = "updateUser" parameterType = "com.mybatis.po.MyUser">
update user set uname = #{uname}, usex = #{usex} where uid = #{uid}
</update>
<!--删除一个用户-->
<delete id = "deleteUser" parameterType = "Integer">
delete from user where uid = #{uid}
</delete>
</mapper>
8.在resource目录下创建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>
<!--配置环境-->
<environments default="development">
<environment id = "development">
<!--使用JDBC进行事务管理-->
<transactionManager type = "JDBC"/>
<dataSource type = "POOLED">
<!--MySQL数据库驱动-->
<property name = "driver" value = "com.mysql.jdbc.Driver"/>
<!--连接数据库的url-->
<property name = "url" value = "jdbc:mysql://localhost:3306/spring?characterEncoding=utf8"/>
<property name = "username" value = "root"/>
<property name = "password" value = "123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--映射文件的位置-->
<mapper resource = "com/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
9.在src/main/java目录下创建com.mybatis.test包,在该包中创建测试类MyBatisTest
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 com.mybatis.po.MyUser;
public class MyBatisTest {
public static void main(String[] args) {
try {
//读取配置文件mybatis-config.xml
InputStream config = Resources.getResourceAsStream("mybatis-config.xml") ;
//根据配置文件构建SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config) ;
//根据SqlSessionFactory构建SqlSession
SqlSession ss = ssf.openSession();
//SqlSession执行映射文件中定义的SQL,并返回映射结果
//删除一个用户
ss.delete("com.mybatis.mapper.UserMapper.deleteUser",4) ;
//查询一个用户
MyUser myUser = ss.selectOne("com.mybatis.mapper.UserMapper.selectUserById",1) ;
System.out.println(myUser);
//添加一个用户
MyUser addmu = new MyUser() ;
addmu.setUid(4);
addmu.setUname("王国栋") ;
addmu.setUsex("男") ;
ss.insert("com.mybatis.mapper.UserMapper.addUser",addmu) ;
//修改一个用户
MyUser updatemu = new MyUser() ;
updatemu.setUid(1);
updatemu.setUname("张珂珂") ;
updatemu.setUsex("男");
ss.update("com.mybatis.mapper.UserMapper.updateUser",updatemu) ;
//查询所有用户
List<MyUser> listMu = ss.selectList("com.mybatis.mapper.UserMapper.selectAllUser") ;
for(MyUser m : listMu) {
System.out.println(m);
}
//提交事务
ss.commit() ;
ss.close();
}catch(IOException e) {
e.printStackTrace() ;
}
}
}
10.控制台输出的测试结果如下: