MyBatis初体验

1.简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2.入门

​https://codeload.github.com/mybatis/mybatis-3/zip/mybatis-3.5.0​​ 下载jar包

mybatis_hello初识mybatis_MyBatis的执行步骤


解压

mybatis_hello初识mybatis_如何创建MyBatis项目_02

3.MyBatis工作原理

1.读取MyBatis配置文件;
2.加载映射文件;
3.构建会话工厂;
4.创建SQLSession对象;
5.MyBatis底层定义了一个Executor接口操作数据库,根据SqlSession传递的参数动态生成需要执行的SQL语句,同时负责查询缓存的维护;
6.在Executor接口的执行方法中,包含一个MappedStatement类型的参数,此参数是对映射信息的封装;
7.输入参数映射;
8.输出结果映射。

4.例子

4.1准备

MyBatis的jar包:

mybatis_hello初识mybatis_MyBatis的执行步骤_03


ojdbc驱动的jar包

mybatis_hello初识mybatis_如何创建MyBatis项目_04


注意ojdbc和jdk的对应关系。

4.2创建一个Java工程

mybatis_hello初识mybatis_MyBatis与oracle数据库集成_05


jdk1.8

导入jar包

mybatis_hello初识mybatis_MyBatis工作原理_06


其中除去ojdbc与mybatis的jar包,其余都是下载的mybatis的jar包中的lib中的文件。

4.3创建Java类

mybatis_hello初识mybatis_MyBatis的执行步骤_07

package domain;

import java.io.Serializable;

public class People implements Serializable{

/**
*
*/
private static final long serialVersionUID = -3270893239281340723L;

private Long id;

private String name;

private Integer age;

private Integer sex;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Integer getSex() {
return sex;
}

public void setSex(Integer sex) {
this.sex = sex;
}

@Override
public String toString() {
return "people [id=" + this.id + ",name=" + this.name + ",age="
+ this.age + ",sex=" + this.sex;
}


}
package client;

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;

import domain.People;

public class Main {

public static void main(String[] args) throws IOException {
String resource = "resource/mybatis.xml";
// 1.读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 3.通过SqlSessionFactory创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.执行mapper中的sql,返回结果
People people = sqlSession.selectOne(
"mapper.PeopleMapper.selectPeopleById", Long.valueOf(101));
System.out.println(people);
sqlSession.close();
}

}

4.4 xml文件

mybatis_hello初识mybatis_MyBatis_08


PeopleMapper.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="mapper.PeopleMapper">
<select id="selectPeopleById" resultType="domain.People"
parameterType="Long">
select * from people where id = #{id}
</select>
</mapper>
<?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="oracle">
<environment id="oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:oracle"/>
<property name="username" value="study"/>
<property name="password" value="study"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PeopleMapper.xml"/>
</mappers>
</configuration>

4.5 配置文件

mybatis_hello初识mybatis_MyBatis的执行步骤_09


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
log4j.logger.domain=DEBUG

4.6运行

log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
people [id=101,name=aPeople,age=53,sex=0]

5.总结

主要有几个点:

1.jdk与ojdbc对应

2.jdk与mybatis对应

3.log4j配置

4.jdbc的url

5.出现bug如何调试

log4j配置

mybatis_hello初识mybatis_如何创建MyBatis项目_10


红框中是自己需要打印日志的包的路径。

优化的点:

jdbc的配置应该使用propertis配置,而不是写死:新增ojdbc.properties文件:

mybatis_hello初识mybatis_MyBatis与oracle数据库集成_11


ojdbc.properties

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
username=study
password=study

原mybatis.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>
<properties resource="property/ojdbc.properties"></properties>
<environments default="oracle">
<environment id="oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PeopleMapper.xml"/>
</mappers>
</configuration>

mybatis_hello初识mybatis_MyBatis与oracle数据库集成_12


第一个框内是读取配置文件;

第二个框是引用读取的值,以字符串的方式拼接。

运行结果与原来相同。