一、介绍

  MyBatis是一个基于Java的持久层半自动ORM框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJO类,映射成数据库中的记录。

二、特点

  1、轻量级。没有任何第三方依赖,最简单安装只需要两个jar文件+几个mapper映射文件。

三、核心

  1、动态SQL

where标签能够自动为sql语句添加where关键字。同时自动去掉其中第一个if语句中的开头and关键字

<where>
    <if test="">and sql1</if>
    <if test="">and sql2</if>
  </where>

  2、输入输出映射

<resultMap>
    <id cloumn="user_name" property="userName" />
    <result cloumn="password" property="password" />
    <!--输出类中的一个集合属性-->
    <collection property="userList" javaType="list">
    </collection>
    <!--输出类中的一个对象属性-->
    <association property="car" javaType="com.Car">
    </association>
  </resultMap>

四、使用步骤

  dao实现类方式

  1.创建SqlSessionFactory

  2.获取SqlSession

  3.通过SqlSession执行数据库操作

  4.释放资源

@Override
    public List<User> findUserByUserName(String userName) throws Exception {
        
        //1.创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsReader("SqlMapConfig.xml"));
        //2.获取SqlSession
        SqlSession session = sf.openSession();
        //选择要执行的id(已在映射文件中写好)
        String statedmentId = "test.findUserByUserName";
        //3.通过SqlSession执行数据库操作
        List<User> list = session.selectList(statedmentId,userName);
        //4.释放资源
        session.close();
        //返回结果
        return list;
    }

  dao接口方式

* 前提:1)接口和映射文件在同一包下  2)接口和映射文件名字相同  3)映射文件的名称空间必须是对应接口的全类名

同包同名

mybatis plus mysql 关键字 mybatis语法关键字_MyBatis

名称空间对应

mybatis plus mysql 关键字 mybatis语法关键字_映射文件_02

  1.创建SqlSessionFactory

  2.获取SqlSession

  3.获取动态代理对象

  4.通过代理对象执行数据库操作

  5.释放资源

@Override
    public int userRegister(User user) throws Exception {
        //1.创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsReader("SqlMapConfig.xml"));
        //2.获取SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        //3.获取动态代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //4.执行接口中的方法--即映射文件中的SQL操作
        mapper.getOne(user);
        //5.释放资源
        session.close();
        return 0;
    }

  总是频繁的创建工厂,获取session是非常消耗资源的。所以我们选择将这个创建过程交给spring容器去管理。下面开始整合

四、Spring整合Mybatis

在spring核心配置文件中添加如下配置:

  1.配置数据源

  2.配置MyBatis会话工厂

  3.配置mapper映射文件包扫描

<!-- 加载db属性文件 -->
    <context:property-placeholder location="classpath:db.propertis"/>
    
    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="20"/>
        <property name="maxIdle" value="5"/>
    </bean>
    
    <!-- 配置会话工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 指定mybatis核心配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
    </bean>
    
    <!-- 配置mapper -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 指定需要扫描的接口所在的包 -->
        <property name="basePackage" value="com.hpe.dao"></property>
    </bean>

 

 完整的整合,事务的配置是单独的一个配置文件,这里也可以暂时不做配置

  4.配置事务管理器

  5.添加事务注解驱动--(这里只配置简单的注解方式的事务,还有AOP方式的事务管理)

<!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 添加事务注解驱动 -->
    <tx:annotation-driven/>

至此,Spring整合MyBatis完毕。通过在Service层中使用@Autowired注解注入即可。(属性名,必须是接口名的开头变小写的格式)

@Autowired
    private UserMapper userMapper;
    
    /**
     * 
     * 使用该对象,调用接口中定义的方法。得到数据
     * 
     */
    @Override
    public User login(User user) {
        return userMapper.getUserByLogin(user);
    }

 

有不正确或者不足之处,欢迎大家留言指正