mybatis_hello初识mybatis
原创
©著作权归作者所有:来自51CTO博客作者qq5963a5404b339的原创作品,请联系作者获取转载授权,否则将追究法律责任
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包
解压
3.MyBatis工作原理
1.读取MyBatis配置文件;
2.加载映射文件;
3.构建会话工厂;
4.创建SQLSession对象;
5.MyBatis底层定义了一个Executor接口操作数据库,根据SqlSession传递的参数动态生成需要执行的SQL语句,同时负责查询缓存的维护;
6.在Executor接口的执行方法中,包含一个MappedStatement类型的参数,此参数是对映射信息的封装;
7.输入参数映射;
8.输出结果映射。
4.例子
4.1准备
MyBatis的jar包:
ojdbc驱动的jar包
注意ojdbc和jdk的对应关系。
4.2创建一个Java工程
jdk1.8
导入jar包
其中除去ojdbc与mybatis的jar包,其余都是下载的mybatis的jar包中的lib中的文件。
4.3创建Java类
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文件
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 配置文件
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配置
红框中是自己需要打印日志的包的路径。
优化的点:
jdbc的配置应该使用propertis配置,而不是写死:新增ojdbc.properties文件:
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>
第一个框内是读取配置文件;
第二个框是引用读取的值,以字符串的方式拼接。
运行结果与原来相同。