3)定义mapper接口
/**
- 书籍表的映射接口
*/
public interface BookMapper {
void insert(Book book);
}
4) 映射文件
<?xml version="1.0" encoding="UTF-8" ?>insert into tb_book(book_name, price, type_id, author, publish_org, publish_time, state,book_image)
values(#{bookName},#{price},#{typeId},#{author},#{publishOrg},#{publishTime},#{state},#{bookImage});
讲解配置:
类似的还有 x x , 但 是 {xx},但是 xx,但是{}是字符串拼接,不能避免注入攻击
- 单元测试
public class TestBookMapper {
@Test
public void testInsert(){
//创建sqlSessionFactoryBuilder对象,用于创建sqlSessionFactory
sqlSessionFactoryBuilder builder = new sqlSessionFactoryBuilder();
//创建sqlSessionFactory
try {
sqlSessionFactory factory = builder.build(Resources.getResourceAsstream(“mybatis-config.xml”));
//sqlSessionFactory用于创建sqlSession会
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
话
try(sqlSession session = factory.openSession()){
//通过session获得Mapper对象
BookMapper mapper = session.getMapper(BookMapper.class);
//执行操作
mapper.insert(new Book(0L,“test-11”,88,1,“xx”,“xx”,“2011-1-1”,0,“xx.jpg”));
//提交修改
session.commit();
}
} catch (IOException e) {
e.printstacktrace();
}
}
}
3、MyBatis的查询
1) 给接口加方法
List findAll();
Book findById(int id);
2) 返回值的配置
需要给select标签配置返回值的类型resultType
select * from tb_book
select * from tb_book where id = #{id}
3) 测试
@Test
public void testSelectAll(){
//创建sqlSessionFactoryBuilder对象,用于创建sqlSessionFactory
sqlSessionFactoryBuilder builder = new sqlSessionFactoryBuilder();
//创建sqlSessionFactory
try {
sqlSessionFactory factory = builder.build(Resources.getResourceAsstream(“mybatis-config.xml”));
//sqlSessionFactory用于创建sqlSession会话
try(sqlSession session = factory.openSession()){
//通过session获得Mapper对象
BookMapper mapper = session.getMapper(BookMapper.class);
//执行操作
List books = mapper.findAll();
books.forEach(book -> System.out.println(book));
}
} catch (IOException e) {
e.printstacktrace();
}
}
原因:数据库的字段单词以下划线分隔,Java的属性以驼峰命名,名称不一致无法实现映射
tb_book表的字段:
id、book_name、price、type_id、author、publish_org、publish_time、state、book_image
Book类的属性:
id、bookName、price、typeId、author、publishOrg、publishTime、state、bookImage
两种解决方法:
1) 添加resultMap,实现数据库字段和属性的映射,把resultType改为resultMap
2) 在mybatis配置文件里,配置下划线转换为驼峰命名风格
对比resultMap和resultType:
resultType用于定义返回值的类型,值就是java类的完整限定名。
resultMap的属性有:id(标识id)和type(java类的完整限定名)
resultMap子节点有:id(主键)和result(普通字段)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。