结合API完成环境搭建
1 导入对应的jar包
因为MyBatis是操作数据库的,所以也需要导入数据库对应的包,需要记录日志所以导入了log4j,在控制台做个记录,对于我们学习有帮助,能看到执行过程
2 创建MyBatis配置文件
在src下创建 mybatis-config.xml
在src下创建 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>
<!-- 链接数据库只需要一个属性来配置文件,就会自动解析 -->
<properties resource="jdbc.properties" />
<!-- 设置别名,然后就可以使用别名来代替前面的路径 -->
<typeAliases>
<typeAlias type="com.tledu.zrz.model.User" alias="User"/>
<typeAlias type="com.tledu.zrz.model.Address" alias="Address"/>
</typeAliases>
<!-- 设置环境,development是开发环境 -->
<environments default="development">
<environment id="development">
<!-- 事务管理器,由JDBC实现,靠JDBC提供 -->
<transactionManager type="JDBC" />
<!-- 数据源,就是数据库连接池,至于怎么实现的,不需要咱们管 -->
<dataSource type="POOLED">
<!-- ${} 在jsp中是EL表达式,这里是OGNL表达式 -->
<!-- 自动获取jdbc.properties里面的值,设置到连接池中
name="driver" 这个driver不能更改
value="${driver}" 这个driver需要和jdbc.properties中一致
-->
<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="com/tledu/zrz/model/User.xml" />
</mappers>
</configuration>
3 因为要操作数据库,所以准备示例数据
create table t_user(
id int(11) primary key auto_increment,
username varchar(100),
password varchar(100),
nickname varchar(100),
`type` int (2)
);
create table t_address(
id int(11) primary key auto_increment,
addr varchar(255),
phone varchar(100),
postcode varchar(100),
user_id int(11),
CONSTRAINT foreign key (user_id) references t_user(id)
);
insert into t_user(username,password,nickname,type) values('admin','123','超级管理员',1);
insert into t_address(addr,phone,postcode,user_id) values ('123','123','123',1);
4 创建User和Address实体类
public class User {
private int id;
private String username;
private String password;
private String nickname;
// 1 是管理员,0是普通用户
private int type;
/**
* 地址是多,User是一
*/
private List<Address> addresses;
}
public class Address {
private int id;
private String phone;
private String addr;
/**
* 邮政编码
*/
private String postcode;
/**
* 保存User对象,是一个双向关联
*/
private User user;
}
5 src下创建jdbc.properties配置数据库
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/_08_
username=root
password=root
6 日志文件
log4j.properties 把这个文件放到src下即可,因为我们导入了log4j的包,再加上这个配置文件,就可以在控制台做一些记录说明
7 数据库操作的xml文件
以User为例,Address练习
创建一个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 是用于调用的时候的映射
-->
<mapper namespace="User">
<!--
id : 表示调用的SQL的名字,相当于方法名
parameterType : 表示传入参数的类型,写类全名,但是由于设置的别名,所以可以写User
resultType : 结果集类型
-->
<insert id="add" parameterType="User" >
<!-- 这里的#username 就等于是用 ? 的方式,等方法调用的时候,会传递一个参数,就会自动映射到username的属性上 -->
insert into t_user (username,password,nickname,type) values (#{username},#{password},#{nickname},#{type})
</insert>
</mapper>
8 JUnit测试
1 导入对应的JUnit包
JUnit使用
/**
* @Test 对应的方法只能是成员方法,相当于main()方法一样,会被自动调用执行
*
* @Before 对应的方法只能是成员方法,在@Test方法执行之前执行
* @After 对应的方法只能是成员方法,在@Test方法执行之后执行
并且 以上两个都是有多少个 @Test 就执行多少次
*
* @BeforeClass 对应的方法只能是静态方法,在执行第一个 @Test 之前执行,并且只执行一次,在 @Befor 之前执行
* @AfterClass 同上,在最后执行,并在 @After 之后
*
* 我们可以把测试代码放到 @Test 中,测试代码需要准备的数据或措施放到 @Before 和 @After 中,比如开始事务和事务提交
* 把全局需要的数据和措施放到 @BeforeClass 和 @AfterClass 中 比如创建连接和关闭链接
*/
@Before
public void B() {
System.out.println("Before");
}
@After
public void A() {
System.out.println("After");
}
@BeforeClass
public static void BS() {
System.out.println("BeforeClass");
}
@AfterClass
public static void AS() {
System.out.println("AfterClass");
}
测试MyBatis
@Test
public void testAddUser() throws IOException {
String resource = "mybatis-config.xml";
// 读取总配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 获取session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取session
SqlSession session = sqlSessionFactory.openSession();
// 调用xml中的sql
User user = new User();
user.setUsername("1234");
user.setPassword("1234");
user.setNickname("1234");
user.setType(0);
// 调用
session.insert("User.add", user);
// 提交
session.commit();
}