• Mybatis与Spring整合(CURD)


    项目采用Maven构建,用Junit进行测试,数据库是Mysql,连接池是c3p0,未测试缓存部分

    1、Maven的“pom.xml”文件

      1 <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">
      2     <modelVersion>4.0.0</modelVersion>
      3     <groupId>com.mcs</groupId>
      4     <artifactId>mybatis04</artifactId>
      5     <version>0.0.1-SNAPSHOT</version>
      6 
      7     <properties>
      8         <!-- Generic properties -->
      9         <java.version>1.8</java.version>
     10         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     11         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     12         <!-- Custom properties -->
     13         <mybatis.version>3.3.0</mybatis.version>
     14     </properties>
     15 
     16     <dependencies>
     17         <!-- junit -->
     18         <dependency>
     19             <groupId>junit</groupId>
     20             <artifactId>junit</artifactId>
     21             <scope>test</scope>
     22         </dependency>
     23         <!-- log4j -->
     24         <dependency>
     25             <groupId>log4j</groupId>
     26             <artifactId>log4j</artifactId>
     27         </dependency>
     28         <!-- 数据库连接驱动 -->
     29         <dependency>
     30             <groupId>mysql</groupId>
     31             <artifactId>mysql-connector-java</artifactId>
     32         </dependency>
     33         <!-- c3p0 -->
     34         <dependency>
     35             <groupId>com.mchange</groupId>
     36             <artifactId>c3p0</artifactId>
     37         </dependency>
     38 
     39         <!-- spring -->
     40         <dependency>
     41             <groupId>org.springframework</groupId>
     42             <artifactId>spring-core</artifactId>
     43         </dependency>
     44         <dependency>
     45             <groupId>org.springframework</groupId>
     46             <artifactId>spring-context</artifactId>
     47         </dependency>
     48         <dependency>
     49             <groupId>org.springframework</groupId>
     50             <artifactId>spring-context-support</artifactId>
     51         </dependency>
     52         <dependency>
     53             <groupId>org.springframework</groupId>
     54             <artifactId>spring-orm</artifactId>
     55         </dependency>
     56         <dependency>
     57             <groupId>org.springframework</groupId>
     58             <artifactId>spring-webmvc</artifactId>
     59         </dependency>
     60         <dependency>
     61             <groupId>org.springframework</groupId>
     62             <artifactId>spring-tx</artifactId>
     63         </dependency>
     64         <dependency>
     65             <groupId>org.springframework</groupId>
     66             <artifactId>spring-jdbc</artifactId>
     67         </dependency>
     68         <dependency>
     69             <groupId>org.springframework</groupId>
     70             <artifactId>spring-aspects</artifactId>
     71         </dependency>
     72         <dependency>
     73             <groupId>org.springframework</groupId>
     74             <artifactId>spring-messaging</artifactId>
     75         </dependency>
     76         <dependency>
     77             <groupId>org.springframework</groupId>
     78             <artifactId>spring-test</artifactId>
     79         </dependency>
     80 
     81         <!-- apache commons -->
     82         <dependency>
     83             <groupId>commons-logging</groupId>
     84             <artifactId>commons-logging</artifactId>
     85         </dependency>
     86 
     87         <!-- mybatis -->
     88         <dependency>
     89             <groupId>org.mybatis</groupId>
     90             <artifactId>mybatis</artifactId>
     91             <version>${mybatis.version}</version>
     92         </dependency>
     93         <dependency>
     94             <groupId>org.mybatis</groupId>
     95             <artifactId>mybatis-spring</artifactId>
     96             <version>1.2.3</version>
     97         </dependency>
     98 
     99     </dependencies>
    100 
    101 
    102     <dependencyManagement>
    103         <dependencies>
    104             <dependency>
    105                 <groupId>io.spring.platform</groupId>
    106                 <artifactId>platform-bom</artifactId>
    107                 <version>2.0.0.RELEASE</version>
    108                 <type>pom</type>
    109                 <scope>import</scope>
    110             </dependency>
    111         </dependencies>
    112     </dependencyManagement>
    113 
    114     <build>
    115         <finalName>Mybatis</finalName>
    116         <plugins>
    117             <plugin>
    118                 <groupId>org.apache.maven.plugins</groupId>
    119                 <artifactId>maven-surefire-plugin</artifactId>
    120                 <version>2.19</version>
    121                 <configuration>
    122                     <!-- Maven 跳过运行 Test 代码的配置 -->
    123                     <skipTests>true</skipTests>
    124                 </configuration>
    125             </plugin>
    126         </plugins>
    127     </build>
    128 </project>
    View Code

    2、配置文件

    2.1、db.properties  

    1 jdbc.driverClass = com.mysql.jdbc.Driver
    2 jdbc.jdbcUrl = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
    3 jdbc.user = root
    4 jdbc.password = root
    5 
    6 c3p0.initialPoolSize = 5
    7 c3p0.maxPoolSize = 100
    View Code

    2.2、spring-core.xml  

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     3         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
     4 
     5     <!-- 配置自动扫描的包 -->
     6     <context:component-scan base-package="com.mcs">
     7         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
     8         <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
     9     </context:component-scan>
    10     
    11 </beans>
    View Code

    2.3、spring-mybatis.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
     3         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     4         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
     5         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
     6         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
     7     
     8     <!-- 加载数据库配置文件 -->
     9     <context:property-placeholder location="classpath:db.properties"/>
    10     
    11     <!-- 1、配置数据源 -->
    12     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    13         <property name="user" value="${jdbc.user}"></property>
    14         <property name="password" value="${jdbc.password}"></property>
    15         <property name="driverClass" value="${jdbc.driverClass}"></property>
    16         <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
    17         
    18         <property name="initialPoolSize" value="${c3p0.initialPoolSize}"></property>
    19         <property name="maxPoolSize" value="${c3p0.maxPoolSize}"></property>
    20     </bean>
    21     
    22     <!-- 2、配置sqlSessionFactory -->
    23     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    24         <!-- 加载数据源 -->
    25         <property name="dataSource" ref="dataSource"></property>
    26         <!-- 加载MyBatis配置文件 -->
    27         <property name="configLocation" value="classpath:mybatis.xml"></property>
    28     </bean>
    29     
    30     <!-- 3、配置Mapper文件自动扫描 -->
    31     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    32         <property name="basePackage" value="com.mcs.dao" ></property>
    33         <property name="sqlSessionFactoryBeanName"  value="sqlSessionFactory"></property>
    34     </bean>
    35     
    36     <!-- 4、配置事务管理器 -->
    37     <!-- MyBatis默认使用Spring JDBC的事务管理器 -->
    38     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    39         <property name="dataSource" ref="dataSource"></property>
    40     </bean>
    41     
    42     <!-- 5、拦截器方式配置事物 -->
    43     <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    44         <tx:attributes>
    45             <tx:method name="add*" propagation="REQUIRED" />
    46             <tx:method name="append*" propagation="REQUIRED" />
    47             <tx:method name="save*" propagation="REQUIRED" />
    48             <tx:method name="update*" propagation="REQUIRED" />
    49             <tx:method name="modify*" propagation="REQUIRED" />
    50             <tx:method name="edit*" propagation="REQUIRED" />
    51             <tx:method name="delete*" propagation="REQUIRED" />
    52             <tx:method name="remove*" propagation="REQUIRED" />
    53             <tx:method name="init" propagation="REQUIRED" />
    54             <tx:method name="delAndInit" propagation="REQUIRED" />
    55 
    56             <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
    57             <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    58             <tx:method name="load*" propagation="SUPPORTS" read-only="true" />
    59             <tx:method name="search*" propagation="SUPPORTS" read-only="true" />
    60             <tx:method name="datagrid*" propagation="SUPPORTS" read-only="true" />
    61 
    62             <tx:method name="*" propagation="REQUIRED" />
    63         </tx:attributes>
    64     </tx:advice>
    65     <aop:config>
    66         <aop:pointcut id="transactionPointcut" expression="execution(* com.mcs.service..*Impl.*(..))" />
    67         <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
    68     </aop:config>
    69 
    70 </beans>
    View Code

    2.4、mybatis.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>        
     6     
     7     <!-- 全局的参数配置,如开启二级缓存等 -->    
     8     <settings>
     9         <!-- 配置延迟加载,按需加载对象属性 -->
    10         <setting name="lazyLoadingEnabled" value="true"/>  
    11         <setting name="aggressiveLazyLoading" value="false"/> 
    12     </settings>
    13     
    14     <!-- 使用别名 -->
    15     <typeAliases>
    16         <!-- 为包下的所有文件设置别名,别名为类名,不分大小写 -->
    17         <package name="com.mcs.entity"/>
    18     </typeAliases>
    19     
    20 </configuration>
    View Code

    2.5、log4j.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
     3 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
     4     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
     5         <layout class="org.apache.log4j.PatternLayout">
     6             <param name="ConversionPattern" 
     7                 value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) 
    " />
     8         </layout>
     9     </appender>
    10     <logger name="java.sql">
    11         <level value="debug" />
    12     </logger>
    13     <logger name="org.apache.ibatis">
    14         <level value="debug" />
    15     </logger>
    16     <root>
    17         <level value="debug" />
    18         <appender-ref ref="STDOUT" />
    19     </root>
    20 </log4j:configuration>
    View Code

    3、数据库实体类

     1 package com.mcs.entity;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Department implements Serializable {
     6 
     7     private static final long serialVersionUID = 6706877732712610561L;
     8 
     9     private Integer id;
    10 
    11     private String name;
    12 
    13     private String telephone;
    14 
    15     private Integer managerId;
    16 
    17     private Integer parentId;
    18 
    19     public Integer getId() {
    20         return id;
    21     }
    22 
    23     public void setId(Integer id) {
    24         this.id = id;
    25     }
    26 
    27     public String getName() {
    28         return name;
    29     }
    30 
    31     public void setName(String name) {
    32         this.name = name == null ? null : name.trim();
    33     }
    34 
    35     public String getTelephone() {
    36         return telephone;
    37     }
    38 
    39     public void setTelephone(String telephone) {
    40         this.telephone = telephone == null ? null : telephone.trim();
    41     }
    42 
    43     public Integer getManagerId() {
    44         return managerId;
    45     }
    46 
    47     public void setManagerId(Integer managerId) {
    48         this.managerId = managerId;
    49     }
    50 
    51     public Integer getParentId() {
    52         return parentId;
    53     }
    54 
    55     public void setParentId(Integer parentId) {
    56         this.parentId = parentId;
    57     }
    58 
    59     @Override
    60     public String toString() {
    61         return "Department [id=" + id + ", name=" + name + ", telephone=" + telephone + ", managerId=" + managerId
    62                 + ", parentId=" + parentId + "]";
    63     }
    64     
    65     
    66 }
    View Code

    4、Mapper.xml文件与对应的接口

    4.1、DepartmentMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
     3 <mapper namespace="com.mcs.dao.DepartmentMapper">
     4 
     5     <resultMap id="departmentResultMap" type="Department">
     6         <id column="id" property="id" jdbcType="INTEGER" />
     7         <result column="name" property="name" jdbcType="VARCHAR" />
     8         <result column="telephone" property="telephone" jdbcType="VARCHAR" />
     9         <result column="manager_id" property="managerId" jdbcType="INTEGER" />
    10         <result column="parent_id" property="parentId" jdbcType="INTEGER" />
    11     </resultMap>
    12 
    13     <sql id="Base_Column_List">
    14         id, name, telephone, manager_id, parent_id
    15     </sql>
    16 
    17     <select id="findById" parameterType="Integer" resultMap ="departmentResultMap">
    18         select * from t_department where id = #{id}
    19     </select>
    20 
    21     <select id="findAll" resultMap="departmentResultMap">
    22         select * from t_department
    23     </select>
    24 
    25     <select id="findDetails" parameterType="Integer" resultMap="departmentResultMap">
    26         select * from t_department where parent_id = #{value}
    27     </select>
    28 
    29 
    30     <insert id="add" parameterType="com.mcs.entity.Department">
    31         <!-- 将Insert插入的数据的主键返回到User对象中,只限Mysql的自增长的Key -->
    32         <selectKey keyProperty="id" order="AFTER" resultType="int">
    33             SELECT LAST_INSERT_ID()
    34         </selectKey>
    35         
    36         insert into t_department
    37             (name, telephone, manager_id, parent_id)
    38         values
    39             (#{name}, #{telephone}, #{managerId}, #{parentId})
    40     </insert>
    41     
    42     <!-- 
    43     新增获取自增Key的另外一种方式
    44     <insert id="add"  keyColumn="id" keyProperty="id" useGeneratedKeys="true"  parameterType="com.mcs.entity.Department">
    45         insert into t_department
    46             (name, telephone, manager_id, parent_id)
    47         values
    48             (#{name}, #{telephone}, #{managerId}, #{parentId})
    49     </insert>
    50      -->
    51 
    52     <update id="updateById" parameterType="com.mcs.entity.Department">
    53         update t_department
    54         set name = #{name},
    55         telephone = #{telephone},
    56         manager_id = #{managerId},
    57         parent_id = #{parentId}
    58         where id = #{id}
    59     </update>
    60 
    61     <delete id="deleteById" parameterType="Integer">
    62         delete from t_department where id = #{id}
    63     </delete>
    64 
    65 </mapper>
    View Code

    4.2、DepartmentMapper.java

     1 package com.mcs.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.mcs.entity.Department;
     6 
     7 public interface DepartmentMapper {
     8 
     9     public void add(Department department) throws Exception;
    10 
    11     public void updateById(Department department) throws Exception;
    12 
    13     public void deleteById(Integer id) throws Exception;
    14 
    15     public Department findById(Integer id) throws Exception;
    16 
    17     public List<Department> findAll() throws Exception;
    18 
    19     public List<Department> findDetails(Integer parentId) throws Exception;
    20 
    21 
    22 }
    View Code

    5、Service层代码

    5.1、DepartmentService.java

     1 package com.mcs.service;
     2 
     3 import java.util.List;
     4 
     5 import com.mcs.entity.Department;
     6 
     7 public interface DepartmentService {
     8     public Department add(Department department) throws Exception;
     9 
    10     public void updateById(Integer id, Department department) throws Exception;
    11 
    12     public void deleteById(Integer id) throws Exception;
    13 
    14     public Department findById(Integer id) throws Exception;
    15 
    16     public List<Department> findAll() throws Exception;
    17 
    18     public List<Department> findDetails(Integer parentId) throws Exception;
    19 
    20 }
    View Code

    5.2、DepartmentServiceImpl.java

     1 package com.mcs.service.impl;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.springframework.beans.BeanUtils;
     7 import org.springframework.beans.factory.annotation.Autowired;
     8 import org.springframework.stereotype.Service;
     9 
    10 import com.mcs.dao.DepartmentMapper;
    11 import com.mcs.entity.Department;
    12 import com.mcs.service.DepartmentService;
    13 
    14 @Service("departmentService")
    15 public class DepartmentServiceImpl implements DepartmentService {
    16     
    17     @Autowired
    18     private DepartmentMapper departmentMapper;
    19 
    20     public Department add(Department department) throws Exception {
    21         departmentMapper.add(department);
    22         return department;
    23     }
    24 
    25     public void updateById(Integer id, Department department) throws Exception {
    26         Department d = departmentMapper.findById(id);
    27         BeanUtils.copyProperties(department, d);
    28         departmentMapper.updateById(d);
    29     }
    30 
    31     public void deleteById(Integer id) throws Exception {
    32         departmentMapper.deleteById(id);
    33     }
    34 
    35     public Department findById(Integer id) throws Exception {
    36         return departmentMapper.findById(id);
    37     }
    38 
    39     public List<Department> findAll() throws Exception {
    40         List<Department> departments = new ArrayList<Department>();
    41         departments = departmentMapper.findAll();
    42         return departments;
    43     }
    44 
    45     public List<Department> findDetails(Integer parentId) throws Exception {
    46         List<Department> departments = new ArrayList<Department>();
    47         departments = departmentMapper.findDetails(parentId);
    48         return departments;
    49     }
    50 
    51 
    52 }
    View Code

    6、测试代码TestDepartmentService.java

     1 package com.mcs.test;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.log4j.Logger;
     6 import org.junit.Test;
     7 import org.junit.runner.RunWith;
     8 import org.springframework.beans.factory.annotation.Autowired;
     9 import org.springframework.test.context.ContextConfiguration;
    10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    11 
    12 import com.mcs.entity.Department;
    13 import com.mcs.service.DepartmentService;
    14 
    15 @RunWith(SpringJUnit4ClassRunner.class)
    16 @ContextConfiguration(locations = { "classpath:spring-core.xml", "classpath:spring-mybatis.xml" })
    17 public class TestDepartmentService {
    18     /**
    19      * Logger for this class
    20      */
    21     private static final Logger logger = Logger.getLogger(TestDepartmentService.class);
    22     
    23     @Autowired
    24     private DepartmentService departmentService;
    25 
    26     @Test
    27     public void test() throws Exception {
    28 
    29     }
    30     
    31     @Test
    32     public void testFindById() throws Exception {
    33         Department department = departmentService.findById(3);
    34         logger.debug(department);
    35     }
    36     
    37     @Test
    38     public void testAdd() throws Exception {
    39         Department department = new Department();
    40         department.setName("行政部");
    41         department.setTelephone("021-86868686");
    42         department.setParentId(2);
    43         
    44         department = departmentService.add(department);
    45         logger.debug(department);
    46     }
    47     
    48     @Test
    49     public void testUpdateById() throws Exception {
    50         Department department = departmentService.findById(14);
    51         
    52         department.setTelephone("010-66668888");
    53         
    54         departmentService.updateById(14, department);
    55         logger.debug("部门更新成功!");
    56     }
    57     
    58     @Test
    59     public void testDeleteById() throws Exception {
    60         departmentService.deleteById(15);
    61     } 
    62     
    63     @Test
    64     public void testFindAll() throws Exception {
    65         List<Department> departments = departmentService.findAll();
    66         
    67         logger.debug(departments);
    68     } 
    69     
    70     @Test
    71     public void testFindDetails() throws Exception {
    72         List<Department> departments = departmentService.findDetails(1);
    73         
    74         logger.debug(departments);
    75     } 
    76     
    77     
    78 }
    View Code
  • 相关阅读:
    sklearn的train_test_split函数
    Tensorflow报错:InvalidArgumentError: You must feed a value for placeholder tensor 'input_y' with dtype
    conda install 安装太慢怎么办?
    python merge、concat合并数据集
    如何调用写好的指定模块?——sys.path
    对分类特征做编码
    ThreadPoolExecutor的创建
    MYSQL中VARCHAR长度怎么选?
    JAVA实现一个低性能的WEB服务器(一)——线程池
    在连接校园网的同时连接外网|同时访问内网与外网
  • 原文地址:https://www.cnblogs.com/maocs/p/5045924.html
Copyright © 2020-2023  润新知