mybatis基于注解开发的单表查询05
注解开发的好处
注解的应用,加速度了代码开发的速度,并且不用去写xml映射文件.
注解开发的步骤
1.将SqlMapConfig.xml的主配置文件的mappers标签修改成注解开发
<mappers>
<package name="cn.itcast.dao"/>
</mappers>
2.需要在IUserDao的增删改查方法上面增加注解和对应的sql语句
import cn.itcast.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface UserDao {
@Select("select * from user")
List<User> findAll();
@Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
void save(User user);
@Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday}where id=#{id}")
void update(User user);
@Delete("delete from user where id=#{id}")
void delete(Integer id);
@Select("select *from user where id=#{id}")
User findByid(Integer id);
@Select("select * from user where username like #{username}")
List<User> findByName(String name);
@Select("select count(*) from user")
int findCount();
}
注意事项
通过映射文件xml和注解不能在同一个dao中进行否则程序会报错,最好一个dao要不全部使用注解开发,要不全部使用xml的形式开发.
mybatis进行重复操作的封装
在SqlMapConfig.xml中数据源的配置可以直接采用properties文件进行解析直接采用表达式的形式.
jdbcConfig.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///chucun
jdbc.username=root
jdbc.password=111111
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>
<properties resource="jdbcConfig.properties"></properties>
<typeAliases>
<package name="cn.itcast.domain.User"></package>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.itcast.dao"/>
</mappers>
</configuration>
将测试类中的读取主配置文件SqlMapConfig.xml和创建工厂和生产代理利用注解@Before 封装到方法inint()中让程序运行开始执行并且利用注解@After将提交事务和释放资源封装到方法destory()中让程序在结束前销毁
private InputStream in;
private SqlSessionFactory factory;
private SqlSession session;
private UserDao userDao;
@Before
public void inint() throws IOException {
in = Resources.getResourceAsStream("SqlMapConfig.xml");
factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
userDao = session.getMapper(UserDao.class);
}
@After
public void destory() throws IOException {
session.commit();
session.close();
in.close();
}
可以通过注解的形式让实体类中的属性可以与数据库中的字段不一致也可以达成mybatis中crud的操作
resultMap注解可以让别的crud操作语句也可以直接使用,避免了每个语句都需要用注解来配置.
二级缓存基于注解开发
只需要在IUserDao的接口名上增加注解@CacheNamespace(blocking = true)就可以实现二级缓存
@CacheNamespace(blocking = true)
public interface UserDao {