MyBatis注解模式和优化
MyBatis注解模式
之前我们使用xml文件方式实现sql语句的编写,我们也可以使用注解模式编写sql语句。
前面的基本配置一致,不再叙述。
第一步:创建实体类
根据数据库的列名与表名设计实体类
数据库信息:(表名t_student)
实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private String phone;
private String email;
private String profession;
private Integer age;
}
第二步:创建对应dao接口
使用注解方式语法:
//@注解(sql语句)
@Select("select * from t_student")
//方法
public List<Student> queryAll();
增删改查都有其对应的注解:
添加:@Insert()
删除:@Delete()
修改:@Update()
查询:@Select()
映射接口:
public interface StudentDao {
//通过注解的方式查询所有学生
@Select("select * from t_student")
public List<Student> queryAll();
}
把dao接口放到MyBatis配置文件中
第三步:测试
public class StudentTest {
@Test
public void queryTest() throws Exception{
//读取 MyBatis配置文件资源
//import org.apache.ibatis.io.Resources; 注意这里导入的包必须是ibatis下的
Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
//创建SqlSessionFactory工厂(根据读取mybatis配置文件进行创建)
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
//开启SqlSession会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过映射关系,获取映射文件中对应的接口
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
//通过接口调用相关查询方法
List<Student> studentList = studentDao.queryAll();
//将结果输出
System.out.println("roleList = " + studentList);
}
}
效果展示:
注意:注解的模式适用于单表操作,对于多表操作仍然推荐使用xml文件的方式。
优化
1. 引入数据库属性文件
使用数据库属性文件可以将数据库连接的信息更加方便管理,当数据库信息需要修改时,只需要修改数据库属性文件即可实现全部修改。
①在resources目录下创建一个数据源的属性文件db.properties
#dirver名字随便起,但是需要做到见名知意 driver表示驱动器
driver=com.mysql.cj.jdbc.Driver
#url表示数据库的路径
url=jdbc:mysql://localhost:3306/day124?serverTimezone=Asia/Shanghai
#username表示数据库的名称
username=root
#password表示数据库的密码
password=1qaz2wsx
②在MyBatis配置文件下添加资源文件
2. 可以为实体类起别名
在MyBatis配置文件中使用标签<typeAliases>起别名
<typeAliases>
<!-- typeAlias:为一个指定的实体类起别名 type:实体类的路径全称 alias:为这个实体类起别名-->
<typeAlias type="com.hrc.entity.Role" alias="Role"/>
<!-- package:为包下所有的实体类起一个默认的别名 默认别名是其对应的类名 -->
<package name="com.hrc.entity"/>
</typeAliases>
在映射文件中使用别名: