文章目录
前言
最近刚学了mybatis框架,本文用于以后使用mybatis时,查看具体内容,作为mybatis笔记使用,记录其中关于mybatis的内容
MyBatis的使用
引入jar包
jar包放在WEB-INF的lib下
- druid.jar 阿里开源连接池框架,用于替换mybatis内置连接池
- log4j.jar 日志文件
- lombok.jar 包含实体类的一些常用方法
- mybatis.jar mybatis框架
- mysql-connector.jar JDBC连接jar包
创建实体类

创建Mapper接口(dao层)

其中是对数据库的操作的接口
更换数据源
- 首先添加druid配置文件

配置文件内容
druid.driver =com.mysql.cj.jdbc.Driver
druid.url = jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
druid.username=用户名
druid.password=密码
此处
=
前面的内容不能随意更改,文件的名称同样不能更改。
- 更改mybatis内置连接池,将无连接池的替换为druid连接池

文件内容:
packagecom.dyit.util;importorg.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;importcom.alibaba.druid.pool.DruidDataSource;publicclassMybatisDataSourceextendsUnpooledDataSourceFactory{//替换数据源publicMybatisDataSource(){this.dataSource =newDruidDataSource();}}
配置实体类和数据库的映射

文件名需要为
xxx.mapper.xml
内容:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 此处填写对数据库操作的接口 --><mappernamespace="com.dyit.mapper.IBookMapper"><cache/><!-- type中本来需要写类的全路径 应该在配置文件中 对实体类进行了设置 所以此处不需要写全名 --><resultMaptype="Book"id="BookMap"><!-- property为实体类的属性名 column为对应数据库的字段名 --><idproperty="id"column="book_id"/><resultproperty="isbn"column="book_isbn"/><resultproperty="title"column="book_title"/><resultproperty="author"column="book_author"/><resultproperty="price"column="book_price"/><resultproperty="date"column="book_date"/><resultproperty="cover"column="book_cover"/></resultMap><!-- 一下是对数据库操作的sql语句 插入标签为insert 增加为update 修改update 查询select --><!-- id为接口中的方法名 --><insertid="save">
INSERT INTO book_tab(book_isbn,book_title,book_author,book_price,book_date,book_cover)
VALUES(#{isbn},#{title},#{author},#{price},#{date},#{cover})
</insert><selectid="findByisbn"resultMap="BookMap">
SELECT * FROM book_tab WHERE book_isbn = #{isbn}
</select><!-- resultMap为上面数据库和实体类映射的id --><selectid="findById"resultMap="BookMap">
SELECT * FROM book_tab WHERE book_id = #{id}
</select></mapper>
#{}为根据参数名取出具体的参数值
- 如果为单参数可直接使用形参名
- 如果为多参,可以设置注解类填写别名
BookfindBookByIsbn(@Param("isbn")String isbn);
如果设置了别名则{}需要填写别名
${}是拼接 #{}是注入 #{}可以防止sql注入漏洞
mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 读取数据源配置文件 --><propertiesresource="resource/druid/druid.properties"/><!-- 实体类的别名 --><typeAliases><packagename="com.dyit.entity"/></typeAliases><environmentsdefault="development"><environmentid="development"><!-- 事务管理器JDBC --><transactionManagertype="JDBC"/><!-- 配置MyBatis --><dataSourcetype="com.dyit.util.MybatisDataSource"><propertyname="driverClassName"value="${druid.driver}"/><propertyname="url"value="${druid.url}"/><propertyname="username"value="${druid.username}"/><propertyname="password"value="${druid.password}"/></dataSource></environment></environments><!-- 表和类之间的映射 --><mappers><mapperresource="resource/mapper/Book.mapper.xml"/></mappers></configuration>
封装sqlSession

packagecom.dyit.util;importjava.io.IOException;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.apache.log4j.Logger;/**
* 单例模式返回实例
* @author strve
*
*/publicclassMybatisUtil{privateSqlSessionFactory sqlSessionFactory;privatestaticMybatisUtil instance;//私有化构造方法privateMybatisUtil(){init();}//返回实例publicstaticMybatisUtilgetInstance(){if(instance ==null){synchronized(MybatisUtil.class){if(instance ==null){
instance =newMybatisUtil();}}}return instance;}//初始化publicvoidinit(){try{//加载配置文件 返回sqlSessionFactory
sqlSessionFactory =newSqlSessionFactoryBuilder().build(Resources.getResourceAsReader("resource/config/mybatis-config.xml"));}catch(IOException e){Logger.getLogger(MybatisUtil.class).debug(e.getMessage());
e.printStackTrace();}}//得到SqlSession对象publicSqlSessionopeSqlSession(){return sqlSessionFactory.openSession();}}
创建单例模式 ,可以得到mybatis封装类对象,可以sqlsession对象
服务层实现

接口中内容和IBookMapper接口相同
实现类:
packagecom.dyit.service.impl;importorg.apache.ibatis.session.SqlSession;importcom.dyit.entity.Book;importcom.dyit.mapper.IBookMapper;importcom.dyit.service.IBookService;importcom.dyit.util.MybatisUtil;publicclassBookServiceImplimplementsIBookService{//得到mybatis封装类对象privateMybatisUtil db =MybatisUtil.getInstance();@OverridepublicBookfindBookByIsbn(String isbn){//得到sqlSession对象SqlSession sqlSession = db.opeSqlSession();//根据对数据库操作的接口 得到其对象IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);//实现其方法 注意需要在mapper.xml中书写正确的sql语句Book book = mapper.findByisbn(isbn);//提交 事务 注意不能少
sqlSession.commit();
sqlSession.close();return book;}}
最后就是controller层的servlet,即可。
版权归原作者 Vivien_oO0 所有, 如有侵权,请联系我们删除。