MyBatis开发环境搭建:
3 添加日志的属性配置文件log4j.properties
在工程中的classpath路径下添加一个名为 config的源文件夹,用来存放各种配置文件。首先我们创建log4j.properties文件,MyBatis默认使用log4j作为打印日志信息的工具,其配置内容如下:
1 创建Java Project
使用什么IDE无所谓,eclipse、myeclipse、idea等等都可以,jdk版本好像也没什么限制,只是有些东西低版本的不支持,比如MyBatis的核心xml文件解析用的xpath是jdk1.5才有的,因此建议使用jdk1.5及其以上版本。
2 下载MyBatis的jar包及其他依赖包并导入工程中。
MyBatis的核心包、依赖包以及数据库驱动包、日志包等等都是必须的。当然我们使用Junit编写测试程序,因此Junit包也要引入,这样基本上就齐了,如下图所示:
在工程中的classpath路径下添加一个名为 config的源文件夹,用来存放各种配置文件。首先我们创建log4j.properties文件,MyBatis默认使用log4j作为打印日志信息的工具,其配置内容如下:
# Global logging configuration
# 在开发环境下日志级别要设置成debug,生产环境设置成info或者error
log4j.rootLogger=DEBUG, stdout
# 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
4 添加MyBatis的全局配置文件SqlMapConfig.xml
同样我们将SQLMapConfig.xml文件放在config文件夹下,该配置文件是MyBatis核心配置文件,配置内容为数据源、事务管理以及后续要添加的映射文件路径等等。其初始配置信息如下:
<?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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="mysql" />
</dataSource>
</environment>
</environments>
</configuration>
以上4步我们就完成了框架的初始环境搭建,下面我们就要开始编写具体的程序代码和映射文件进行入门程序的编码了。
MyBatis示例程序编写:
5 创建PO类,即实体类以及和该实体类对应的映射文件
我们以User为例,其对应的映射文件为User.xml,需要注意的是,每个实体类对应一个映射文件,并且和实体类同名。
User.java
public class User implements Serializable {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
User.xml(在config文件夹下建立一个子文件夹名为sqlmap,里面存放所有的映射文件)
<?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命名空间,作用就是对sql进行分类化管理,理解sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">
<!-- 在 映射文件中配置很多sql语句 -->
<!-- 需求:通过id查询用户表的记录 -->
<!-- 通过 select执行数据库查询
id:标识 映射文件中的 sql
将sql语句封装到mappedStatement对象中,所以将id称为statement的id
parameterType:指定输入 参数的类型,这里指定int型
#{}表示一个占位符号
#{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称
resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。
-->
<select id="findUserById" parameterType="int" resultType="cn.ljw.mybatis.po.User">
SELECT * FROM USER WHERE id=#{value}
</select>
</mapper>
6 将编写的User.xml配置在MyBatis全局配置文件SQLMapConfig.xml中,加载映射文件
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>
7 编写测试程序
@Test
public void findUserById() throws IOException{
//MyBatis配置文件
String resource="SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream= Resources.getResourceAsStream(resource);
//创建会话工厂,传入MyBatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession=sqlSessionFactory.openSession();
//通过SqlSession操作数据库
//第一个参数:映射文件中statement的id,格式为=namespace+“.”+statementid
//第二个参数:指定和映射文件中所匹配的parameterType类型的参数
//sqlSession.selectOne结果是与映射文件中所匹配的resultType类型的对象
User user=sqlSession.selectOne("test.findUserById",25);
System.out.println(user);
//释放资源
sqlSession.close();
}
至此我们就完成了MyBatis第一个入门程序的编写和测试,整个过程基本上都比较好理解,可能对于映射文件不是很熟悉,MyBatis的实体类映射文件里面配置都是操作实体类对象的statement(可以理解成方法)对应的SQL语句以及该方法对于的参数类型以及返回值类型。我个人觉得,MyBatis的核心内容都是在映射文件中,只要我们能够熟悉并且灵活地编写映射文件,那么我们已经掌握了MyBatis的精髓所在。MyBatis为什么灵活,原因就在这个映射文件中,在后续的学习中你会越来越有体会。