`

Spring3+mybatis+mysql整合详解(四)

阅读更多

使用Mybatis,你需要配置一个SqlMapConfig.xml的文件,主要用于配置sql语句的映射。当然,你也可以使用注解的方式直接将sql语句写入到class中,但我个人觉得sql语句后期优化的时候可能会时常调整。如果硬编码到class中,修改不方便。

 

好了,下面我们来看SqlMapConfig的配置:

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3. <configuration>  
  4.     <settings>  
  5.         <!-- 这个配置使全局的映射器启用或禁用缓存 -->  
  6.         <setting name="cacheEnabled" value="true" />  
  7.         <!-- 允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 Derby) -->  
  8.         <setting name="useGeneratedKeys" value="true" />  
  9.         <!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新  -->  
  10.         <setting name="defaultExecutorType" value="REUSE" />  
  11.         <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->  
  12.         <setting name="lazyLoadingEnabled" value="true"/>  
  13.         <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。  -->  
  14.         <setting name="defaultStatementTimeout" value="25000"/>    
  15.     </settings>  
  16.        
  17.     <!-- 别名配置 -->  
  18.     <typeAliases>  
  19.         <typeAlias alias="Users" type="com.hl.usersmanager.model.Users" />  
  20.         <typeAlias alias="Login" type="com.hl.usersmanager.model.Login" />  
  21.         <typeAlias alias="LoginLog" type="com.hl.usersmanager.model.LoginLog" />  
  22.     </typeAliases>  
  23.        
  24.     <!-- 指定映射器路径 -->  
  25.     <mappers>  
  26.         <mapper resource="com/hl/usersmanager/dao/mappers/UserMapper.xml" />  
  27.         <mapper resource="com/hl/usersmanager/dao/mappers/LoginMapper.xml" />  
  28.     </mappers>  
  29. </configuration>   
<?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="cacheEnabled" value="true" />
		<!-- 允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 Derby) -->
		<setting name="useGeneratedKeys" value="true" />
		<!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新  -->
		<setting name="defaultExecutorType" value="REUSE" />
		<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。  -->
		<setting name="defaultStatementTimeout" value="25000"/> 
	</settings>
	
	<!-- 别名配置 -->
	<typeAliases>
		<typeAlias alias="Users" type="com.hl.usersmanager.model.Users" />
		<typeAlias alias="Login" type="com.hl.usersmanager.model.Login" />
		<typeAlias alias="LoginLog" type="com.hl.usersmanager.model.LoginLog" />
	</typeAliases>
	
	<!-- 指定映射器路径 -->
	<mappers>
		<mapper resource="com/hl/usersmanager/dao/mappers/UserMapper.xml" />
		<mapper resource="com/hl/usersmanager/dao/mappers/LoginMapper.xml" />
	</mappers>
</configuration> 

 

 settings部分都是可选配置,如果 你不配置,mybatis都设有默认值。附件指南中对相关配置讲解的很详细。

typeAliases部分主要是给一些java bean 配置一个别名,你使用这个bean的时候直接使用别名即可。特别在mappers配置文件中使用很方便,后面我们会讲到。这有点类似JNDI。

mappers部分为mybatis的Sql配置。这里你可以直接将sql配置写在mappers配置里面,也可以像本例中一样,新建一个mappers映射文件,然后在mappers配置中指向映射文件。

 

下面我们以LoginMapper.xml为例讲解一下mappers配置:

 

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. <!-- 这里namespace必须是接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”-->  
  4. <mapper namespace="com.hl.usersmanager.dao.ILoginMapper">  
  5.     <!-- 这里的id必须和接口中的方法名相同,不然运行的时候也要报错 -->  
  6.     <select id="findLogin" resultMap="findLoginResultMap">  
  7.         <!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 -->  
  8.         select * from login inner join users on login.user_id=users.id   
  9.     </select>  
  10.        
  11.     <!-- 自定义映射关系 -->  
  12.     <resultMap type="Login" id="findLoginResultMap">  
  13.         <!-- 标记结果作为ID 可以帮助提高整体效能 -->  
  14.         <id property="id" column="id"/>  
  15.         <!-- 注入到字段或JavaBean 属性的普通结果 -->  
  16.         <result property="loginName" column="loginName"/>  
  17.         <result property="passWord" column="passWord"/>  
  18.         <result property="loginTime" column="loginTime"/>  
  19.         <!-- 一个复杂的类型关联;许多结果将包成这种类型 (一对一映射) -->  
  20.         <association property="users" column="user_id" javaType="Users">  
  21.             <id property="id" column="id"/>  
  22.             <result property="name" column="name"/>  
  23.             <result property="age" column="age"/>  
  24.             <result property="phone" column="phone"/>  
  25.         </association>  
  26.     </resultMap>  
  27.        
  28.     <select id="findLoginLogInfo" resultMap="findLoginLogInfoResultMap">  
  29.         select *,loginLog.id as log_id,users.id as users_id from login inner join users on login.user_id=users.id left join loginLog on loginloginLog.login_id=login.id   
  30.     </select>  
  31.        
  32.     <resultMap type="Login" id="findLoginLogInfoResultMap">  
  33.         <id property="id" column="id"/>  
  34.         <result property="loginName" column="loginName"/>  
  35.         <result property="passWord" column="passWord"/>  
  36.         <result property="loginTime" column="loginTime"/>  
  37.         <association property="users" column="user_id" javaType="Users">  
  38.             <id property="id" column="users_id"/>  
  39.             <result property="name" column="name"/>  
  40.             <result property="age" column="age"/>  
  41.             <result property="phone" column="phone"/>  
  42.         </association>  
  43.         <!-- 复杂类型的集合 (一对多映射) -->  
  44.         <collection property="loginLogs" ofType="LoginLog">  
  45.             <id property="id" column="log_id"/>  
  46.             <result property="loginTimeLog" column="loginTimeLog"/>  
  47.         </collection>  
  48.     </resultMap>  
  49. </mapper>  
<?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">
<!-- 这里namespace必须是接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”-->
<mapper namespace="com.hl.usersmanager.dao.ILoginMapper">
	<!-- 这里的id必须和接口中的方法名相同,不然运行的时候也要报错 -->
	<select id="findLogin" resultMap="findLoginResultMap">
		<!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 -->
		select * from login inner join users on login.user_id=users.id
	</select>
	
	<!-- 自定义映射关系 -->
	<resultMap type="Login" id="findLoginResultMap">
		<!-- 标记结果作为ID 可以帮助提高整体效能 -->
		<id property="id" column="id"/>
		<!-- 注入到字段或JavaBean 属性的普通结果 -->
		<result property="loginName" column="loginName"/>
		<result property="passWord" column="passWord"/>
		<result property="loginTime" column="loginTime"/>
		<!-- 一个复杂的类型关联;许多结果将包成这种类型 (一对一映射) -->
		<association property="users" column="user_id" javaType="Users">
			<id property="id" column="id"/>
			<result property="name" column="name"/>
			<result property="age" column="age"/>
			<result property="phone" column="phone"/>
		</association>
	</resultMap>
	
	<select id="findLoginLogInfo" resultMap="findLoginLogInfoResultMap">
		select *,loginLog.id as log_id,users.id as users_id from login inner join users on login.user_id=users.id left join loginLog on loginLog.login_id=login.id
	</select>
	
	<resultMap type="Login" id="findLoginLogInfoResultMap">
		<id property="id" column="id"/>
		<result property="loginName" column="loginName"/>
		<result property="passWord" column="passWord"/>
		<result property="loginTime" column="loginTime"/>
		<association property="users" column="user_id" javaType="Users">
			<id property="id" column="users_id"/>
			<result property="name" column="name"/>
			<result property="age" column="age"/>
			<result property="phone" column="phone"/>
		</association>
		<!-- 复杂类型的集合 (一对多映射) -->
		<collection property="loginLogs" ofType="LoginLog">
			<id property="id" column="log_id"/>
			<result property="loginTimeLog" column="loginTimeLog"/>
		</collection>
	</resultMap>
</mapper>
 

首先,大家注意<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">我这里使用的是mybatis3的配置文件格式,如果使用较低版本的ibatis,标签会有一些差异!

mapper标签有个namespace,指向dao层的接口(这里,顺便说一下,我们使用Spring3+mybatis+mysql整合,dao层只需要一个接口就行了,不再需要实现类。mybatis会自动创建代理类完成数据查询及封装,这个查询条件及封装依据就取决于我们这里的mappers映射文件。另外,如果特殊的操作,比如数据库备份之类,你可以手动创建实现类完成操作,附件里面有实例。)

mybatis的增、删、改、查对应相应的insert、delete、update、select标签。注意标签的id一定要与接口中的方法名相同。

我们重点看一下查询。

1、单表查询:

 

Xml代码 复制代码 收藏代码
  1. <select id="findAllUsers" resultType="Users" useCache="true">  
  2.     select * from users   
  3. </select>  
<select id="findAllUsers" resultType="Users" useCache="true">
	select * from users
</select>

 注意resultType="Users" 中的Users即前面我们配置的别名,否则要引用com.hl.usersmanager.model.Users。

如果有参数,则需要指定参数类型:

 

Xml代码 复制代码 收藏代码
  1. <select id="findUserByName" resultType="Users" parameterType="java.lang.String">  
  2.     select * from users where name=#{name}   
  3. </select>  
<select id="findUserByName" resultType="Users" parameterType="java.lang.String">
	select * from users where name=#{name}
</select>

 2、多表查询:

数据查询涉及到数据封装及将数据从ResultSet中封装为我们需要的对象。在Mybatis中,可以使用 resultType进行简单的封装。例如我们指定 resultType为Users,Mybatis会自动将查询结果封装到Users的属性中。那么如果Users关联到其他实体bean呢?这种情况下,如果我们使用 resultType的方式封装,关联对象将不会被封装!所以我们就需要另外一个更强大的东东,那就是resultMap!

resultMap说白了,就是自定义数据封装方式,就是告诉mybatis哪个字段对应实体的哪个属性。

为了能使resultMap配置能够重用,通常我们会单独建一个resultMap,然后在select中使用resultMap=" resultMapId"的方式引用。

在resultMap中,如果是一一映射,便使用association(注意其javaType属性,就是告诉Mybatis这个关联要封装为什么java bean);如果是一对多则使用collection(需要在实体bean中指定关联对象为List集合,例如private List<LoginLog> loginLogs;

 )

 

insert、update、delete操作方式类似,下面我们看一下insert:

 

Xml代码 复制代码 收藏代码
  1. <insert id="insertUser" parameterType="Users">  
  2.         <!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 -->  
  3.         insert into users(name,age,phone) values(#{name},#{age},#{phone})   
  4.     </insert>  
<insert id="insertUser" parameterType="Users">
    	<!-- 这里sql结尾不能加分号,否则报“ORA-00911”的错误 -->
		insert into users(name,age,phone) values(#{name},#{age},#{phone})
    </insert>

 parameterType属性,我们指定为Users,然后使用values(#{name},#{age},#{phone}的方式,Mybatis会自动将Users的name,age,phone属性值作为参数。

 

 

 

 

好了,Mybatis配置部分就是这样。

总体上讲,我个人感觉,虽然Mybatis相对Hibernate没有那么自动化,很多东西需要我们手动配置,但这也显示出Mybatis的灵活性。对后期查询优化、缓存系统建设都是有好处的。

分享到:
评论

相关推荐

    Spring3+mybatis+mysql整合详解(一)

    总之,Spring、MyBatis和MySQL的整合是Java开发中的常见实践,通过这种方式,我们可以利用Spring的强大管理能力,MyBatis的灵活SQL操作,以及MySQL的稳定数据库支持,构建出高效且易于维护的应用程序。通过学习和...

    spring MVC+mybatis+Mysql整合

    **Spring MVC + MyBatis + MySQL 整合详解** 在Web开发中,Spring MVC、MyBatis和MySQL是常见的技术组合,它们各自扮演着重要的角色。Spring MVC作为Spring框架的一部分,提供了一个强大的模型-视图-控制器(MVC)...

    Mysql+spring3+MyBatis3

    《MySQL+Spring3+MyBatis3整合应用详解》 在现代企业级开发中,MySQL、Spring和MyBatis这三者是常见的技术栈组合,它们各自承担着数据库管理、框架支持和持久化操作的重要角色。本文将深入探讨这三者的结合使用,...

    spring boot + mybatis + jersey + mysql源码

    【标题】:“Spring Boot + MyBatis + Jersey + MySQL 源码整合详解” 【正文】: 在现代软件开发中,快速构建可扩展且易于维护的Web应用是至关重要的。Spring Boot、MyBatis、Jersey和MySQL这四个组件的整合,...

    Spring Boot+Spring Security+MyBatis+Vue+Mysql物业管理系统源码

    《Spring Boot+Spring Security+MyBatis+Vue+Mysql物业管理系统详解》 在现代的物业管理领域,利用先进的技术手段来提升效率、优化服务已成为趋势。本系统采用一系列主流技术框架构建,包括Spring Boot、Spring ...

    Spring+mybatis+sqlite/mysql

    《Spring+Mybatis+SQLite/MySQL 整合实践详解》 在现代的Web开发中,Spring框架因其强大的功能和灵活性而被广泛采用,它提供了一种模块化的方式来组织应用程序,包括依赖注入、AOP(面向切面编程)以及对其他框架如...

    spring boot+maven+mybatis+mysql

    在本教程中,我们将深入探讨如何使用Eclipse开发工具,结合Spring Boot、Maven、MyBatis和MySQL来创建一个完整的Java Web应用。这四个组件是现代Java开发中的关键技术,它们各自扮演着不同的角色,共同构建了一个...

    基于springmvc+mybatis+spring+maven+mysql的网上租车系统

    《基于SpringMVC+MyBatis+Spring+Maven+MySQL的网上租车系统详解》 在互联网技术高速发展的今天,网上租车系统已经成为一种常见的服务模式,它为用户提供便捷的在线预订车辆服务。本文将深入剖析一个基于SpringMVC...

    Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解

    【Spring MVC 3.0.5 + Spring 3.0.5 + MyBatis3.0.4 全注解实例详解】 Spring MVC 3.0.5 是Spring框架的一个重要版本,它引入了对RESTful风格的支持,使得构建Web应用更加灵活。REST(Representational State ...

    springmvc+spring+mybatis

    ### SpringMVC + Spring + MyBatis 整合配置详解 #### 一、技术栈介绍与选择 在本文档中,我们将详细介绍如何整合SpringMVC、Spring和MyBatis这三大框架来构建一个简单的Web应用。这三个框架在Java Web开发领域内...

    spring+springmvc+mybatis OA考勤管理系统带mysql数据库

    在项目开发过程中,我们需要注意SSM框架的整合配置,包括Spring的bean定义、SpringMVC的配置、MyBatis的SqlSessionFactory配置以及数据库连接池的设置等。此外,还需要考虑系统的安全性,如使用HTTPS协议、防止SQL...

    spring+springMVC+mybatis简单实例

    6. **整合SSM**:将这三个组件整合在一起,需要配置相关的XML文件,如Spring的ApplicationContext.xml、SpringMVC的servlet-context.xml以及MyBatis的mybatis-config.xml。配置完成后,Spring会加载这些配置,初始化...

    springmvc+spring+mybatis+Maven+mysql环境搭建,附源码

    ### Spring MVC + Spring + MyBatis + Maven + MySQL 环境搭建详解 #### 一、概述 在软件开发领域,尤其是Java Web开发中,**Spring MVC + Spring + MyBatis + Maven + MySQL**组合是一种非常流行的开发模式。本文...

    spring+springmvc+mybatis搭建的一个酒店管理系统附带mysql数据库

    《基于Spring+SpringMVC+MyBatis的酒店管理系统与MySQL数据库集成详解》 酒店管理系统是信息化时代提高酒店运营效率的重要工具,它涵盖了预订、入住、退房、账务管理等多个业务环节。本系统采用Spring、SpringMVC和...

    springboot+mybatis plus整合案例

    在本文中,我们将深入探讨如何将SpringBoot与MyBatis Plus进行整合,以便构建一个高效、简洁的Web应用程序。SpringBoot以其快速启动和简化配置的特点,成为开发微服务的首选框架,而MyBatis Plus则作为MyBatis的增强...

    Spring+SpringMVC+Mybatis+Maven+MySql项目框架 加分页详解适合新手学习

    SSM框架,即Spring、SpringMVC和Mybatis的组合,是Java开发中常见的Web应用框架,用于构建高效、灵活的后端系统。本项目旨在为新手提供一个基础的SSM框架搭建教程,并且加入了Maven管理和MySql数据库支持,以及分页...

    spring boot+mybatis+spring mvc+bootstrap+Mysql停车位管理系统源码

    《基于Spring Boot、Mybatis、Spring MVC和Bootstrap的Mysql停车位管理系统详解》 在现代城市生活中,停车位管理是一项至关重要的任务。本系统采用先进的技术栈,包括Spring Boot、Mybatis、Spring MVC和Bootstrap...

    Spring+SpringMVC+MyBatis+Mysql 销售管理系统 毕业设计.zip

    《基于Spring+SpringMVC+MyBatis+Mysql的销售管理系统详解》 在信息技术日益发展的今天,软件工程已经成为各行各业的重要支撑。对于学生而言,毕业设计是他们将理论知识与实际应用相结合的关键环节,其中“Spring+...

Global site tag (gtag.js) - Google Analytics