最近一个项目用到了Spring boot 和Mybatis,在学习这两门技术。
Mybatis的项目搭建相对简单,下载两个jar添加到项目中就可以使用了。mybatis3.5.2以及一个mysql的连接jar。可以去mybatis的网站上(http://www.mybatis.cn/)下载。我项目中使用的是maven,在pom.xml中添加以下依赖就可以了。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
</dependencies>
为方便和我一样的初学者,这是项目的结构,供大家参考。
一:在mysql中新建两个表,(向表里随意添加几条数据)。表结构如下:
t_user表
t_config表
二:建立对应的模型类
User.java
package com.flowerring.mdl;
public class User {
private Integer id;
private String name;
private String sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "id:" + this.id + ",name:" + this.name + ",sex:" + this.sex;
}
}
Config.java
package com.flowerring.mdl;
public class Config {
private String cfgKey;
private String cfgValue;
public String getCfgKey() {
return cfgKey;
}
public void setCfgKey(String cfgKey) {
this.cfgKey = cfgKey;
}
public String getCfgValue() {
return cfgValue;
}
public void setCfgValue(String cfgValue) {
this.cfgValue = cfgValue;
}
@Override
public String toString() {
return "ConfigKey:" + this.cfgKey + "|ConfigValue:" + this.cfgValue;
}
}
三:添加配置文件
文件名为:mybatis_config.xml,文件名可以随意起,建议带上mybatis,防止跟其他插件的配置文件搞混。文件直接放在资源下面:src/main/resources。
其内容如下:
<?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>
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="你的密码" />
</properties>
<environments default="development">
<environment id="development">
<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>
<!-- Xml文件映射模式 -->
<mapper resource="com/flowerring/dao/userMapper.xml" />
<!-- 注解模式 -->
<mapper class="com.flowerring.dao.ConfigDao" />
</mappers>
</configuration>
四:建立映射关系。映射关系有两种,一个是通过xml文件映射,一个是通过注解方式。
1、xml文件映射方式
1.1、建立业务类(DAO类)
package com.flowerring.dao;
import com.flowerring.mdl.User;
public interface UserDao {
public void insertUser(User user);
public User selectUserById(int id);
}
1.2、建立映射文件,(文件放在资源下面)
<?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="com.flowerring.dao.UserDao">
<!-- 一定要指定到具体的Dao,如UserDao -->
<select id="selectUserById" resultType="com.flowerring.mdl.User">
select id,name,sex from
t_user where id = #{id};
</select>
<insert id="insertUser" parameterType="com.flowerring.mdl.User">
insert into
t_user(name,sex) values(#{name},#{sex});
</insert>
</mapper>
2、注解方式
创建业务类(DAO类)
package com.flowerring.dao;
import java.util.List;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import com.flowerring.mdl.Config;
public interface ConfigDao {
@Select("select * from t_config")
@Results({ @Result(column = "cfg_key", property = "cfgKey"), @Result(column = "cfg_value", property = "cfgValue") })
public List<Config> selectAllConfigs();
@Select("select * from t_config where cfg_key = #{cfgKey}")
@Results({ @Result(column = "cfg_key", property = "cfgKey"), @Result(column = "cfg_value", property = "cfgValue") })
public Config selectConfig(String cfgKey);
}
五、创建测试类
在业务类上(DAO类)上点击右键,new--other,在弹出框上,选择Junit Test Case。
创建两个Dao的测试类。
UserDaoTest.java
package com.flowerring.dao;
import java.io.IOException;
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.After;
import org.junit.Before;
import org.junit.Test;
import com.flowerring.mdl.User;
public class UserDaoTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public final void testInsert() {
SqlSession sqlSession = getSessionFactory().openSession();
User u = new User();
u.setName("jerry");
u.setSex("m");
UserDao userMapper = sqlSession.getMapper(UserDao.class);
userMapper.insertUser(u);
System.out.println(u.toString());
}
@Test
public final void testSelectUserById() {
SqlSession sqlSession = getSessionFactory().openSession();
UserDao userMapper = sqlSession.getMapper(UserDao.class);
User u2 = userMapper.selectUserById(2);
System.out.println(u2.toString());
User u3 = userMapper.selectUserById(3);
System.out.println(u3.toString());
User u5 = userMapper.selectUserById(5);
System.out.println(u5.toString());
}
private static SqlSessionFactory getSessionFactory() {
SqlSessionFactory sessionFactory = null;
String resource = "mybatis_config.xml";
try {
sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
} catch (IOException e) {
e.printStackTrace();
}
return sessionFactory;
}
}
ConfigDaoTest.java
package com.flowerring.dao;
import java.io.IOException;
import java.util.List;
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.After;
import org.junit.Before;
import org.junit.Test;
import com.flowerring.mdl.Config;
public class ConfigDaoTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public final void test() {
SqlSession sqlSession = getSessionFactory().openSession();
ConfigDao cfgMapper = sqlSession.getMapper(ConfigDao.class);
List<Config> list = cfgMapper.selectAllConfigs();
System.out.println("Size:" + list.size());
for (Config m : list) {
System.out.println(m.toString());
}
System.out.println("---------------------------");
Config cfg = cfgMapper.selectConfig("maxPerson");
System.out.println(cfg.toString());
}
private static SqlSessionFactory getSessionFactory() {
SqlSessionFactory sessionFactory = null;
String resource = "mybatis_config.xml";
try {
sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
} catch (IOException e) {
e.printStackTrace();
}
return sessionFactory;
}
}
六、测试
右键点击项目名,run as -- Junit Test
结果如下