我们现在工程基于的数据库见“https://www.cnblogs.com/wyhluckdog/p/10147754.html ”这篇博文。
1.mybatis下载
mybatis的代码由githua.com管理,地址:https://github.com/mybatis/mybatis-3/releases
* mybatis-3.2.7.jar----mybatis的核心包
* lib----mybatis的依赖包
* mybatis-3.2.7.pdf----mybatis使用手册
2.需求
实现以下功能:
根据用户id查询一个用户的信息
根据用户名称模糊查询用户信息列表
添加用户
更新用户
删除用户
3.工程搭建
(1)第一步:创建java工程
使用ecplise创建java工程,jdk为1.7.0_72.
(2)第二步:导入jar包
加入mybatis核心包、依赖包(在lib目录下)、数据驱动包、单元测试包。
(3)第三步:创建包结构config,我们将所有的配置文件均放在这个包下。
(4)第四步:在config包下创建配置文件log4j.properties。
# Global logging configuration
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
mybatis默认使用log4j作为作为输出日志信息。
(5)第五步:在config包下创建SqlMapConfig.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> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理--> <transactionManager type="JDBC" /> <!-- 数据库连接池--> <!-- mybatis内置的连接池效率不高所以实际公司开发中我们不用 --> <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="root" /> </dataSource> </environment> </environments> </configuration>
SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。
(6)第六步:po类。在工程下创建po包,用于放置po类(本质上与bean类没有区别,同样是参数和对应的set/get方法)。
po类作为mybatis进行sql映射使用,po类通常与数据库表对应,User.java如下:
package com.huida.po; import java.util.Date; public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public void setId(int id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setSex(String sex) { this.sex = sex; } public void setBirthday(Date birthday) { this.birthday = birthday; } public void setAddress(String address) { this.address = address; } public int getId() { return id; } public String getUsername() { return username; } public String getSex() { return sex; } public Date getBirthday() { return birthday; } public String getAddress() { return address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + "]"; } }
(7)sql映射文件。
在config包下创建sql映射文件User.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"> <!-- namespace:命名空间,做Sql隔离 --> <!-- 在mapper标签中要写很多sql语句。在开发项目的过程中有很多人都会写Sql 语句,在最后整合的时候可能会重复。现在我们使用命名空间开进行隔离,比如zhangsan 写的select * from user,我们可以写为:zhangsan:select * from user来进行标识。 --> <mapper namespace="test"> </mapper>
namespace:命名空间,用于sql隔离语句。
在mapper标签中要写很多sql语句。在开发项目的过程中有很多人都会写Sql语句,在最后整合的时候可能会重复。现在我们使用命名空间开进行隔离,比如zhangsan写的select * from user,我们可以写为:zhangsan:select * from user来进行标识。
(8)第八步:加载映射文件。
mybatis框架需要加载映射文件,将User.xml添加在SqlMapConfig.xml,如下:
<mappers> <mapper resource="config/User.xml"/> </mappers>
(9)第九步:根据id查询用户信息
1、映射文件:
在User.xml的mapper标签中添加:
<!-- id:sql语句的唯一标识 test:findUserById就可以唯一标识sql语句 paremeterType:指定传入的参数类型 resultSetType:返回值结果类型 #{}占位符:起到占位的左永刚,如果传入的基本类型{String,long,double,int boolean等},那么 #{}中的变量名称可以随意写。 --> <select id="findUserById" parameterType="java.lang.Integer" resultType="com.huida.po.User"> <!-- select语句返回的是user对象,所以resultType中写User类的全路径 --> select * from user where id=#{id} </select>
id:sql语句的唯一标识 test:findUserById就可以唯一标识sql语句 paremeterType:指定传入的参数类型 resultSetType:返回值结果类型 #{}占位符:起到占位的左永刚,如果传入的基本类型{String,long,double,int boolean等},那么#{}中的变量名称可以随意写。
2、测试程序:
package com.huida.test; 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 org.junit.Test; import com.huida.po.User; public class UserTest { @Test public void testFindUserById() throws Exception{ //通过流将核心配置文件读取进来 InputStream inputStream=Resources.getResourceAsStream("config/SqlMapConfig.xml"); //通过核心配置文件输入流来创建工厂 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream); //通过工厂创建session SqlSession openSession=factory.openSession(); //查询语句,查询id为1的记录,返回值为User对象 User user=openSession.selectOne("test.findUserById", 1); System.out.println(user); //关闭资源 openSession.close(); //factory没有close(),因为session关闭之后,factory也就关闭了。 } }
(10)执行测试程序,单元测试UserTest方法,可以看到在控制台输出id以及username。说明查询成功。