在当今这个世界什么最值钱,毫无疑问是数据。对于数据一般储存在数据库中,所以对于Java企业级开发,连接数据库就显得很重要了。对于J2EE规范中,JDBC(Java Data Base Connectivity,java数据库连接)相信大家不会陌生。而对于编写过JDBC的朋友,相信对于它冗余重复的操作会不胜其烦。而Mybatis而应运而生了。
Mybatis支持定制化Sql、存储过程以及高级映射的优秀的持久层框架。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs(Plain Old Java Object,普通的Java对象)映射成数据库中的记录。
下面就进入主题,写一个Mybatis的HelloWorld.
1、项目结构
2、Jar包依赖
项目是以Maven来管理Jar包的,整个Jar包依赖都是保存在pom.xml中,包括Mybatis依赖,JDBC连接驱动还有就是日志管理logbakc.
<?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.apache.mybatis</groupId>
<artifactId>mybatis-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.8</version>
</dependency>
</dependencies>
</project>
2、Mybatis相关
这里主要是mybatis和日志相关的配置以及Mybatis相关的使用。
2.1 Mybatis config
Mybatis核心配置文件,用于配置数据库连接池,以及sql相关的映射。
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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="ilovemysql^^^"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org\mybatis\example\BlogMapper.xml"/>
</mappers>
</configuration>
2.2 Blog.java – 实体类
Blog.java对应数据库中blog表,这个实体类的字段与blog表中的字段一一对应。
package org.mybatis.example;
import java.io.Serializable;
public class Blog implements Serializable {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.3 BlogMapper.xml
这个配置文件用于配置动态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">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="org.mybatis.example.Blog">
select * from Blog where id = #{id}
</select>
</mapper>
2.4 BlogMapper.java
BlogMapper主要是映射BlogMapper.xml里面的动态sql.提供Java类方法给业务方调用。
package org.mybatis.example;
public interface BlogMapper {
Blog selectBlog(Integer id);
}
2.5 logback.xml
日志文件配置类,用于打印sql以及传递的参数。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="org.apache.ibatis" level="debug" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
2.6 Main.java
测试类,用于测试Mybatis功能。
package org.mybatis.example;
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 java.io.InputStream;
public class Main {
public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
System.out.println(blog);
}
}
3、运行结果
可以在控制台看到Mybatis的运行结果以及mybatis执行的sql.这里它采用的是预编译PreparedStatement处理。
在这里我们可以看到Mybatis以接口的方式来对应配置文件中的动态sql。这样我们就可以关注于业务代码的开发。关于参数的传递以及返回结果集的定义都可以放置在配置文件中。这样提高了sql参数传递的灵活性,以及消除几乎所有的JDBC代码。