[MyBatis]整合Spring
来源:互联网 发布:linux如何查看文件权限 编辑:程序博客网 时间:2024/06/08 07:36
在项目开发中,MyBatis都是与Spring进行整合开发的,使得MyBatis使用起来更加方便。
pom.xml
jar包版本管理我放在了why-root里统一管理,也可以直接写版本号。
<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> <parent> <artifactId>why-root</artifactId> <groupId>com.base.why</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../why-root/pom.xml</relativePath> </parent> <groupId>com.why.mybatis</groupId> <artifactId>mybatis-why</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <!--SQL监控打印--> <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <!--日志--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency> <!--测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build></project>
项目目录结构
resources
1.db.properties
数据库连接的配置文件
jdbc_driverClassName=com.mysql.cj.jdbc.Driverjdbc_url=jdbc:mysql://localhost:3306/401?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNulljdbc_username=rootjdbc_password=root
2.log4j.properties
日志打印的配置文件
#rootlog4j.rootLogger=info,CONSOLE,file# CONSOLElog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Threshold=ERRORlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %l %t |- %m%n#filelog4j.appender.file=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.file.DatePattern=yyyyMMddlog4j.appender.file.File=../logs/authority-service.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d %-5p %l %t |- %m%n#dubbolog4j.logger.com.alibaba.dubbo=ERROR##p6spylog4j.additivity.p6spy=falselog4j.logger.p6spy=info,spyConsole,filelog4j.appender.spyConsole=org.apache.log4j.ConsoleAppenderlog4j.appender.spyConsole.Target=System.outlog4j.appender.spyConsole.layout=org.apache.log4j.PatternLayoutlog4j.appender.spyConsole.layout.ConversionPattern=######%m%n
3.spy.properties
打印查询数据库执行的SQL
reloadproperties=trueappender=com.p6spy.engine.spy.appender.Slf4JLoggerlogMessageFormat=com.why.mybatis.utils.P6SpyLoggerdatabaseDialectDateFormat=yyyy-MM-dd HH:mm:ssexcludecategories=info,debug,result,resultset
4.SqlMapConfig.xml
MyBatis的全局配置文件
<?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></configuration>
5.spring-mybatis.xml
spring和mybatis整合的配置文件,注意
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--加载db配置文件--> <context:property-placeholder location="classpath:db.properties"/> <!--p6spy 监控--> <bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource"> <constructor-arg ref="dataSourceDruid"/> </bean> <!--数据源,使用druid--> <bean id="dataSourceDruid" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc_driverClassName}"/> <property name="url" value="${jdbc_url}"/> <property name="username" value="${jdbc_username}"/> <property name="password" value="${jdbc_password}"/> </bean> <!--sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--数据库连接池--> <property name="dataSource" ref="dataSource"/> <!--加载MyBatis的全局配置文件--> <property name="configLocation" value="mybatis/SqlMapConfig.xml"/> <!--加载mapper中的xml文件--> <property name="mapperLocations" value="classpath:com/why/mybatis/mapper/*.xml"/> </bean> <!--加载mapper的接口即dao--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.why.mybatis.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean></beans>
UserEntity
自己生成get、set方法
private String id; private String password; private String userCode; private String userRealName; private String email; private String telNum; private String schoolNo; private String operator; private String remark; private String isDelete; private Date createTime;
UserDao
package com.why.mybatis.dao;import com.why.mybatis.entity.UserEntity;public interface UserDao { UserEntity findUserById(String userId);}
UserMapper.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.why.mybatis.dao.UserDao"> <select id="findUserById" parameterType="string" resultType="com.why.mybatis.entity.UserEntity"> SELECT * FROM t_user WHERE id=#{userId} </select></mapper>
P6SpyLogger
package com.why.mybatis.utils;import com.p6spy.engine.spy.appender.MessageFormattingStrategy;import java.text.SimpleDateFormat;import java.util.Date;/** * p6spy打印日志输出格式修改 * 1.只打印最终执行的sql. * 2.sql换到下一行 * 3.结尾处增加分号,以标示sql结尾 */public class P6SpyLogger implements MessageFormattingStrategy { private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); @Override public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql) { if (!("").equals(sql.trim())) { return format.format(new Date()) + " | took " + elapsed + "ms | " + category + " | connection " + connectionId + "\n " + sql + ";"; } return ""; }}
Test
package com.why.mybatis;public class MybatisTest { private ApplicationContext applicationContext; @Before public void setUp() { applicationContext = new ClassPathXmlApplicationContext("classpath:spring/spring-mybatis.xml"); } @Test public void testMybatis() { UserDao userDao = (UserDao) applicationContext.getBean("userDao"); UserEntity userEntity = userDao.findUserById("11DauYzFcEEnZBgN324ZA"); System.out.println(userEntity); }}
运行测试类,得到执行结果如下图所示:
总结:spring整合MyBatis的步骤基本上就是如上的步骤和代码了,上面仅仅是实现了功能,没有对数据库连接池的各种属性进行自定义,也没有对MyBatis进行更多的设置,这就需要根据需求进行优化了。
阅读全文