Spring : 征服数据库 (二)

这部分介绍Spring和ORM框架的整合。虽然Hibernate在开源ORM 社区很流行,但本文会以MyBatis为例讲解。另外关于MyBatis和Hibernate的优劣之分是没有意义的,主要是看实际需求,有兴趣可以百度、谷歌查看。

首先配置环境,你得有mybatis和mybatis-spring在Spring工程的build path里,如果你使用的是Maven,只需添加下面的依赖:(都是目前最新版本)

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.7</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>

这里主要介绍的是Mybatis和Spring的整合,不会着重讲解Mybatis的具体用法。

我们知道,MyBatis应用的核心是SqlSessionFactory,在Spring里也需要定义这样一个bean,

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
  </bean>

使用的是SqlSessionFactoryBean创建SqlSessionFactory,并需要注入数据源dataSource,这里的数据源就是Spring里面定义的任意数据源,为了演示方便,使用的是上一篇文章介绍的H2内嵌数据源,

<jdbc:embedded-database id="dataSource" type="H2">
		<jdbc:script location="classpath:schema.sql" />
		<jdbc:script location="classpath:data.sql" />
	</jdbc:embedded-database>

在MyBatis里面,为实现SQL的映射,使用的是XML配置文件或mapper接口。上一篇我们的SQL的模式如下:

create table spitter (
  id identity,
  username varchar(25) not null,
  password varchar(25) not null,
  fullname varchar(100) not null,
  email varchar(50) not null,
  update_by_email boolean not null
);

新建一个接口,

package org.chen.mybatis.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.chen.domain.Spitter;
public interface SpitterMapper {

	@Select("SELECT * from spitter where email = #{email}")
	Spitter getSpitter(@Param("email") String email);
}

实际上命名并无要求,但约定是domain+Mapper。在一个方法上面添加注解,这里是 @Select,内容是一个SQL语句, #{email}是参数,用于PrepraredStatement使用。

然后使用MapperFactoryBean将该接口注册到Spring,

  <bean id="spitterMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
      <property name="mapperInterface" value="org.chen.mybatis.mapper.SpitterMapper" />
      <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  </bean>

现在使用上面这个bean就可以完成关系对象映射了,我们一般把spitterMapper注入到service里面,

如,

public class TestService {

	private SpitterMapper spitterMapper;

	public void setSpitterMapper(SpitterMapper spitterMapper) {
		this.spitterMapper = spitterMapper;
	}

	public void getSpitterByEmail(String email){

		Spitter spitter = spitterMapper.getSpitter(email);

		System.out.println("spitter is " + spitter.getFullName());
	}
}

至此,基本操作依据能够完成。

时间: 2024-08-10 20:55:25

Spring : 征服数据库 (二)的相关文章

Spring : 征服数据库(一)

严格的说.这里征服的是关系型数据库.之后笔者会以MongoDB为例,给出非关系型数据库的解决方式,敬请期待. 获取连接,操作,关闭,不知所云的异常...是的,你受够了.在使用纯JDBC时你訪问数据库时写的80%的代码是反复的,对此,Spring给的方案是 模板 + 回调.模板就是訪问数据库时的固定操作.回调是变化的部分. 针对不同的持久化平台.你可选的模板是不同的:假设使用的是JDBC,能够选择JdbcTemplate,假设使用特定的ORM框架,能够选择HibernateTemplate或Sql

Spring征服数据库

DAO:数据访问对象(data access object)的缩写. 如何你曾经编写过JDBC代码,你肯定会意识到如果不强制捕获SQLException,你几乎不能使用JDBC做任何事情.SQLException表示在尝试访问数据库时出现了问题,但是这个异常却没有告诉你哪里出错了以及如何进行处理. 可能导致抛出SQLException的常见问题包括: 1.应用程序无法连接数据库. 2.要执行的查询有语法错误. 3.查询中所使用的表和(或)列不存在. 4.试图插入或更新的数据违反了数据库的完整性约

Spring : 征服数据库 (三)

上一篇我们简单的讲解了Spring和MyBatis的整合,但你不难发现,其配置起来还是够麻烦的.最明显的一点是,我们需要在自定义的Mapper接口写个很长的SQL注解,并且还要手动注册到Spring容器.本文主要讲解简化的方法. 首先,还是定义接口,但你已看不到任何框架的痕迹, package org.chen.mybatis.mapper; import org.chen.domain.Spitter; public interface SpitterMapper { Spitter getS

第五章 征服数据库(Spring对DB的使用)——开发持久层

本章内容: 定义Spring对数据库访问的支持 配置数据库资源 使用Spring的JDBC模板 在几乎所有的企业级应用中,都需要构建数据持久层.现在意义上的数据持久层是指把对象或者数据保存到数据库中,以及从数据库中取出数据. Spring提供了一组数据访问框架,它集成了多种数据访问技术.不管是JDBC.iBATIS还是Hibernate. ? 一.Spring的数据访问哲学 Spring开发者一直坚持的一个目标之一就是:允许开发人员在开发应用软件时能够遵循面向对象原则的"针对接口编程"

Spring之数据库

接口是编写松耦合代码的关键 JDBC的异常体系与Spring的数据库访问异常: JDBC:可能导致SQLException异常的常见问题包括: 程序不能连接到数据库 被执行的查询具有语法错误 查询中所引用的表/列不存在 执行插入或更新的值会破坏数据库约束 Spring JDBC提供的数据访问异常体系会解决两个方面的问题,一是JDBC异常,由于任何数据访问错误都会触发SQLException,所以太笼统了:二是Hibernate的异常体系又是私有的这样就与持久框架相关联了. JDBC的异常: Ba

spring自动识别数据库并切换数据源

一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基本上没有什么问题,但唯一可能出现问题的就是在hibernate做添加操作生成主键策略的时候.因为我们都知道hibernate的数据库本地方言会针对不同的数据库采用不同的主键生成策略. 所以针对这一问题不得不采用自定义的主键生成策略,自己写一个主键生成器的表来维护主键生成方式或以及使用其他的方式来生成

Spring学习笔记二

第四章 Spring与数据库 一. DataSource Spring提供了在Spring上下文配置数据源bean的多种方式包括 l 通过JDBC驱动程序定义的数据源 l 通过JNDI查找的数据源 l 连接池的数据源 1. 使用数据源连接池 DBCP(database conection pool)是一个不错的连接池选择. 其中的BasicDataSource的最常用的,因为它在Spring中易于配置.在Spring中可以使用以下代码来配置dbcp. <bean id="datasourc

Spring(四)Spring与数据库编程

Spring最重要的功能毫无疑问就是操作数据.数据库的百年城是互联网编程的基础,Spring为开发者提供了JDBC模板模式,那就是它自身的JdbcTemplate.Spring还提供了TransactionTemplate支持事务的模板.Spring并没有支持MyBatis,好在MyBatis社区开发了接入Spring的开发包,该包也提供了SqlSessionTemplate给开发者使用,该包还可以屏蔽SqlSessionTemplate这样的功能性代码,可以在编程中擦除SqlSessionTe

Spring Security 解析(二) —— 认证过程

Spring Security 解析(二) -- 认证过程 ??在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .Spring Security Oauth2 等权限.认证相关的内容.原理及设计学习并整理一遍.本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知. 项目环境: JDK1.8 Spring boot 2.x Spring Security 5.x 一.@EnableGlobalAuth