mybatis概述
mybatis简介
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
为什么要使用mybatis。
MyBatis是一个半自动化的持久化层框架。
jdbc编程---当我们使用jdbc持久化的时候,sql语句被硬编码到java代码中。这样耦合度太高。代码不易于维护。在实际项目开发中会经常添加sql或者修改sql,这样我们就只能到java代码中去修改。
Hibernate和JPA。
长难复杂SQL,对于Hibernate而言处理也不容易。
内部自动生产的SQL,不容易做特殊优化。
基于全映射的全自动框架,javaBean存在大量字段时无法只映射部分字段。导致数据库性能下降。
对开发人员而言,核心sql还是需要自己优化
sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。
可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。成为业务代码+底层数据库的媒介
搭建mybatis开发环境
添加mybatis的核心 mybatis-3.2.8.jar
添加mysql数据库连接驱动 mysql-connector-java-5.1.7-bin.
添加log4j日记需要的核心 log4j-1.2.17.jar
在src目录下添加 log4j.properties 日记配置文件
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
BookMapper.xml文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 命名空间(名称空间)类似java类的包名 一般使用对应的类的全类名 或者 类的dao的接口名 --> <mapper namespace="com.soyoungboy.bean.Book"> <!-- select标签配置一个select查询语句 id属性 给select语句配置一个唯一标识 #{id} 表示一个占位符 resultType 配置查询语句返回的一个对象的全类名 --> <select id="selectUserById" resultType="com.soyoungboy.bean.Book"> SELECT `id`, `name`, `author`, `price`, `sales`, `stock`, `img_path` imgPath FROM `soyoungboy`.`t_book` where id = #{id} </select> <select id="selectAllBooks" resultType="com.soyoungboy.bean.Book"> SELECT `id`, `name`, `author`, `price`, `sales`, `stock`, `img_path` imgPath FROM `soyoungboy`.`t_book` </select> <insert id="saveBook" resultType="int"> INSERT INTO `soyoungboy`.`t_book`( `name`, `author`, `price`, `sales`, `stock`, `img_path`) VALUES ( #{name}, #{author}, #{price}, #{sales}, #{stock},#{imgPath}) </insert> <delete id="deleteBookById" resultType="int"> DELETE FROM `soyoungboy`.`t_book`WHERE `id` = #{id} </delete> <update id="updateBook" resultType="int"> UPDATE `soyoungboy`.`t_book` SET `name` = #{name}, `author` = #{author}, `price` = #{price}, `sales` = #{sales}, `stock` = #{stock}, `img_path` = #{imgPath} WHERE `id` = #{id} </update> </mapper>
mybatis-config.xml里面进行修改
<mappers> <mapper resource="BookMapper.xml"/> </mappers>
我们测试下:
public class BookTest { static SqlSessionFactory sqlSessionFactory; @BeforeClass public static void setUpBeforeClass() throws Exception { String res = "mybatis-config.xml"; InputStream resourceAsStream = Resources.getResourceAsStream(res); sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); System.out.println(sqlSessionFactory); } @Test public final void test() { SqlSession openSession = sqlSessionFactory.openSession(); try { Book book = openSession.selectOne("com.soyoungboy.bean.Book.selectUserById",30); System.out.println("book = "+book); } finally { openSession.close(); } } }