1 MyBatis 注解开发
@Insert
:实现新增@Update
:实现更新@Delete
:实现删除@Select
:实现查询@Result
:实现结果集封装@Results
:可以与@Result一起使用,封装多个结果集@ResultMap
:实现引用@Results
定义的封装@One
:实现一对一结果集封装@Many
:实现一对多结果集封装@SelectProvider
:实现动态SQL映射@CacheNamespace
:实现注解二级缓存的使用
主配置文件不能省略 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">
<!-- mybatis 的主配置文件-->
<configuration>
<properties resource="jdbc.properties"></properties>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!--配置别名,配置 domain 类中的别名
配置了别名后,就不在区分大小写
-->
<typeAliases>
<!--该包下所有的实体类都被注册别名,类名就是别名,不在区分大小写-->
<package name="com.tzb.domain"/>
</typeAliases>
<!--配置环境-->
<environments default="mysql">
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<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>
<!--指定dao接口所在的包,不需要再写 mapper 以及resource或者 class-->
<mappers>
<package name="com.tzb.dao"/>
</mappers>
</configuration>
1.1 DAO
public interface IUserDao {
@Select(value = "select * from user")
List<User> findAll();
@Insert("insert into user(username,address,sex,birthday) " +
"values (#{username},#{address},#{sex},#{birthday})")
void saveUser(User user);
}
- 单元测试
public class MyBatisTest {
private InputStream in;
private SqlSessionFactory factory;
private SqlSession sqlSession;
private IUserDao userDao;
@Before
public void init() throws IOException {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 工厂
factory = new SqlSessionFactoryBuilder().build(in);
// 3.使用工厂生产 SqlSession 对象
sqlSession = factory.openSession();
// 4.使用 SqlSession 创建DAO接口的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destory() throws IOException {
// 提交事务
sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}
@Test
public void testFindAll(){
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testSave(){
User user = new User();
user.setUsername("宫本武藏");
user.setAddress("日本");
user.setBirthday(new Date());
user.setSex("男");
userDao.saveUser(user);
}
}
2 注解建立实体类属性和数据库列表中列的对应关系