zoukankan      html  css  js  c++  java
  • Mybatis 快速入门

          MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO映射成数据库中的记录.

    1.创建Maven工程,编写pom.xml配置文件,引入jar

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.self</groupId>
      <artifactId>mybatis</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
      
        <!--引入项目依赖的jar包 -->
        <!-- SpringMVC、Spring --> 
        <dependencies>  
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency> 
            <!--JSR303数据校验支持  --> 
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.4.1.Final</version>
            </dependency> 
            <!-- Spring-Jdbc --> 
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency> 
            <!--Spring-test --> 
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency>
    
    
            <!-- Spring面向切面编程 --> 
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency>
    
            <!--MyBatis --> 
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.2</version>
            </dependency>
            <!-- MyBatis整合Spring的适配包 --> 
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
            </dependency>
    
            <!-- 数据库连接池、驱动 --> 
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1</version>
            </dependency> 
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.41</version>
            </dependency>  
            <!-- junit --> 
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies> 
    </project>

    2.Spring整合mybatis

      2.1  数据库连接信息db.properties

    jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.user=root
    jdbc.password=000111

      2.2 mybatis配置文件mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
        
        <typeAliases>
            <package name="com.ssm.bean"/>
        </typeAliases> 
    </configuration>

     2.3 Spring整合

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
     
        <!-- Spring的配置文件,这里主要配置和业务逻辑有关的 -->
        <!--=================== 数据源,事务控制,xxx ================-->
        <context:property-placeholder location="classpath:db.properties" />
        <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
    
        <!--================== 配置和MyBatis的整合=============== -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 指定mybatis全局配置文件的位置 -->
            <property name="configLocation" value="classpath:mybatis-config.xml"></property>
            <property name="dataSource" ref="pooledDataSource"></property>
            <!-- 指定mybatis,mapper文件的位置 -->
            <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
        </bean>
    
        <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--扫描所有dao接口的实现,加入到ioc容器中 -->
            <property name="basePackage" value="com.ssm.dao"></property>
        </bean>
       
        <!-- ===============事务控制的配置 ================-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--控制住数据源  -->
            <property name="dataSource" ref="pooledDataSource"></property>
        </bean>
        <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式)  -->
        <aop:config>
            <!-- 切入点表达式 -->
            <aop:pointcut expression="execution(* com.ssm.service..*(..))" id="txPoint"/>
            <!-- 配置事务增强 -->
            <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
        </aop:config>
        
        <!--配置事务增强,事务如何切入  -->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <!-- 所有方法都是事务方法 -->
                <tx:method name="*"/>
                <!--以get开始的所有方法  -->
                <tx:method name="get*" read-only="true"/>
            </tx:attributes>
        </tx:advice>
        
        <!-- Spring配置文件的核心点(数据源、与mybatis的整合,事务控制) -->
        
    </beans>

    3.编写测试模块

      3.1 JavaBean

     1 package com.ssm.bean;
     2 
     3 public class Department {
     4     private Integer deptId;
     5     private String deptNo;
     6 
     7     private String deptName;  
     8 
     9     public String getDeptNo() {
    10         return deptNo;
    11     }
    12 
    13     public void setDeptNo(String deptNo) {
    14         this.deptNo = deptNo;
    15     }
    16 
    17     public Department() {
    18         super();
    19         // TODO Auto-generated constructor stub
    20     }
    21 
    22      
    23 
    24     public Department(Integer deptId, String deptNo, String deptName) {
    25         super();
    26         this.deptId = deptId;
    27         this.deptNo = deptNo;
    28         this.deptName = deptName;
    29     }
    30 
    31     public Integer getDeptId() {
    32         return deptId;
    33     }
    34 
    35     public void setDeptId(Integer deptId) {
    36         this.deptId = deptId;
    37     }
    38 
    39     public String getDeptName() {
    40         return deptName;
    41     }
    42 
    43     public void setDeptName(String deptName) {
    44         this.deptName = deptName == null ? null : deptName.trim();
    45     }
    46 
    47     @Override
    48     public String toString() {
    49         return "Department [deptId=" + deptId + ", deptNo=" + deptNo + ", deptName=" + deptName + "]";
    50     }
    51     
    52     
    53 }
    View Code

      3.2 Dao层接口

     1 package com.ssm.dao;
     2 
     3 import com.ssm.bean.Department;
     4 
     5 public interface DepartmentMapper { 
     6 
     7    
     8     /**
     9      * 添加记录
    10      * @param dept
    11      * @return
    12      */
    13     int insertSelective(Department dept);
    14  
    15 
    16     /**
    17      * 查询记录
    18      * @param deptId
    19      * @return
    20      */
    21     Department selectByPrimaryKey(Integer deptId);
    22 
    23   
    24 }
    View Code

      3.3 mapper.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">
    <mapper namespace="com.ssm.dao.DepartmentMapper">
      <resultMap id="BaseResultMap" type="com.ssm.bean.Department">
        <id column="dept_id" jdbcType="INTEGER" property="deptId" />
        <result column="dept_name" jdbcType="VARCHAR" property="deptName" />
      </resultMap>
    
      <sql id="Base_Column_List">
        dept_id, dept_name,dept_no
      </sql>  
      <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        select 
        <include refid="Base_Column_List" />
        from tbl_dept
        where dept_id = #{deptId,jdbcType=INTEGER}
      </select>
      
      <insert id="insertSelective" parameterType="com.ssm.bean.Department">
        insert into tbl_dept
        <trim prefix="(" suffix=")" suffixOverrides=",">
          <if test="deptId != null">
            dept_id,
          </if>
          <if test="deptNo != null">
            dept_no,
          </if>
          <if test="deptName != null">
            dept_name,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
          <if test="deptId != null">
            #{deptId,jdbcType=INTEGER},
          </if>
          <if test="deptName != null">
            #{deptNo,jdbcType=VARCHAR},
          </if>
          <if test="deptName != null">
            #{deptName,jdbcType=VARCHAR},
          </if>
        </trim>
      </insert>
     
    </mapper>
    View Code

      3.4运行 

    package com.ssm.test; 
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.ssm.bean.Department;
    import com.ssm.dao.DepartmentMapper;
    
    /** 
     *  使用Spring的单元测试,自动注入需要的组件
     *
     */ 
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext.xml"})
    public class TestOper {
        
        @Autowired
        DepartmentMapper departmentMapper; 
        
        /**
         * 查询数据
         */
        @Test
        public void testSelect(){ 
        Department department = departmentMapper.selectByPrimaryKey(4);
        System.out.println(department);
        }
        
        /**
         * 新增部门
         */
        @Test
        public void testInsert(){  
        departmentMapper.insertSelective(new Department(null,"002", "人力资源部")); 
        }
    
    }
  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/walkwithmonth/p/11180495.html
Copyright © 2011-2022 走看看