Spring与MyBatis开发DAO层总结

前言:先建立Maven,配置好pom.xml文件,将所依赖的包都导入

Dao层开发基本步骤

Dao层的作用:

  • 实现对数据库增删改查操作,并将结果封装起来传递给Service层使用

步骤

  • 创建schema.sql文件来建立数据库以及表的设计
  • 创建jdbc.properties来配置驱动、数据库url、数据库账户及密码
  • 建立封装数据的类(实现数据传递给各个层)
  • 建立dao层操作的接口,待使用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>
		
		<!--使用jdbc的getGeneratekeys获取自增主键值-->
		<setting name="useGeneratedKeys" value="true"/>
		 <!--使用列别名替换列名  默认值为true
        	select name as title(实体中的属性名是title) form table;
        	开启后mybatis会自动帮我们把表中name的值赋到对应实体的title属性中-->
		<setting name="useColumnLabel" value="true"/>
		
		<!--开启驼峰命名转换Table:create_time到 Entity(createTime)-->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	
	</settings>

</configuration>
  • 为dao层每个接口创建配置文件,实现这些接口的方法(这也是MyBatis的好处,可以分离出SQL语句,在后续的维护中可以更有针对性优化SQL语句)
  • 完成Spring与MyBatis在dao层的整合工作:
    1.建立spring-dao.xml来配置(占位符完成jdbc.properties的加载、配置数据库链接池(此处使用c3p0)、配置 SqlSessionFactory对象、配置扫描Dao接口包)
    2.SqlSessionFactory对象成员变量:数据库链接池(dataSource)、mybatis全局配置文件(configLocation)、实体包(typeAliasesPackage)、每个接口实现的配置文件(mapperLocations)
    3.配置MapperScannerConfigurer类实例:成员变量sqlSessionFactory(注意:此处该成员变量名字为sqlSessionFactoryBeanName,以防止提前初始化sqlSessionFactory)、扫描的Dao接口包(basePackage)
<?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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd"
        >

	<context:property-placeholder location="classpath:jdbc.properties"/>

	<!-- 配置数据库链接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 驱动 -->
		<property name="driverClass" value="${jdbc.driver}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}" />
		
		<property name="maxPoolSize" value="30"/>
		<property name="minPoolSize" value="10"/>
		
		<property name="autoCommitOnClose" value="false"/>
		<property name="checkoutTimeout" value="1000"/>
		<property name="acquireRetryAttempts" value="2"/>
	</bean>
	
	<!-- 配置SqilSessionFactory对象 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:mybatis-config.xml"/>
		<property name="typeAliasesPackage" value="cn.xiaofang.entity"/>
		<property name="mapperLocations" value="classpath:mapper/*.xml"/>
	</bean>
	
	<!-- 配置扫描Dao接口包,动态实现Dao接口,注入IOC容器 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
		<property name="basePackage" value="cn.xiaofang.dao"/>
	</bean>
	

</beans>

Dao层开发中的小问题

  • 在建立新表出现 Invalid default value for ‘某一列字段’ 原因
  • 使用mybatis为方法接口配置SQL语句不能使用<=出现冲突,改用<![CDATA[ <= ]]>
  • JAVA不会保留形参名,应该使用@Param("形参名")来修饰,否则在 mybatis 的对应配置文件的SQL语句无法识别(#{形参名})
  • 在xml配置文件中的INSERT语句要用INGORE忽略主键冲突时的异常
  • 在实体中还有实体对象,用mybatis可以将select出来的字段注入到这内部对象的字段中
    SELECT
    sk,skilled_id,
    …,
    s.skilled_id “seckill.seckill_id”,
    s.nameseckill.name”,

    FROM success_killed sk INNER JOIN skilled s ON sk.skilled_id = s.skilled
    WHERE sk.skilled_id =#{} and …;

Mybatis和Spring整合的好处:

  • Mybatis本身简化了开发,可以通过配置文件直接来实现接口,在配置文件中直接用SQL来实现接口的方法,分离了java代码和sql,达到了解耦,在后续开发维护中可以更好的针对SQL语句进行优化更改。
  • Spring与MyBatis整合中,不用在spring-dao.xml文件中一个个类接口进行配置,直接扫描对应的包就可以,大大减少了代码量。
  • 在扫描dao接口时,动态实现dao接口,配置到IOC容器中,代码端直接获取使用就行(@Resource

好处总结:

  1. sql写在配置文件中,便于统一管理优化
  2. 实现sql和程序代码解耦,提高可维护性
  3. 支持动态SQL语句、支持对象与数据库的ORM字段关系映射
  4. mybatis自动实现接口,不用手动实现,并且会自动注入IOC容器中不用手动添加bean

猜你喜欢

转载自blog.csdn.net/qq_41797857/article/details/88798263
今日推荐