Java在写数据库查询时,我接触过四种方式:

1、纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池)
这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错;另一个是,复杂的SQL用字符串写起来简直不可维护(换行、可视长度、参数都是问题)。
2、使用Spring JdbcTemplate
这个其实还是挺不错的,配置比较简单,功能丰富上比手工管理Connection要舒服多了,而且代码也比较简洁。突出的问题就是SQL维护还是挺麻烦的。
3、使用Hibernate框架
一句话,配置很麻烦,用起来还是挺不错的。但是有一个致命缺陷,它并不能像单表查询一样可以帮我们完成多表的查询。如果有复杂的多表查询或查询条件,还是得用SQL去查,这对于一些业务逻辑复杂或者会经常变更的业务来说,后期维护就是灾难,改到想哭(因为真的是很混乱,一定要开始就规划好)。
4、使用MyBatis框架
这个是当前我所做项目最喜欢用的数据库持久化框架了,它通过XML配置可以非常简单直观地帮你完成各种条件、判断、多表的综合查询,实现方式比Java代码拼SQL要舒服太多了,在这方面更是甩Hibernate一条街。要说易用性,其实也挺容易用的,但是配置上也要对一些数据做映射,不过相对而言更加灵活。它的实体类并不一定要是数据库物理表,而可以是任意查询出来的数据集(类似数据传输对象DTO)。
简单总结一下:
配置容易程度:1 > 2 > 4 > 3
使用便捷程度:2 > 3 > 4 > 1
查询灵活程度:4 > 1 = 2 > 3
下面将开始介绍Spring集成MyBatis的配置和使用,项目基于Maven构建,连接Mysql数据库:
一、Maven配置
<!-- Spring Base --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.5.RELEASE</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency>
关于Spring的包引用,我这里的引用只作为参考,其它web、mvc的包视各业务来引用。如果不用Maven,就自己乖乖引jar包,或者使用其它包管理吧。
二、Spring配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxdb" /> <property name="user" value="lekko" /> <property name="password" value="xxx" /> <property name="minPoolSize" value="2" /> <property name="maxPoolSize" value="100" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" /> <property name="dataSource" ref="myDataSource" /> </bean> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="lekko.code.**.dao" /> </bean> </beans>
这里的配置比较关键。
1、myDataSource是一个ComboPooledDataSource类型的实例bean,它实现了数据库连接池的功能。
2、sqlSessionFactory是MyBatis用于建立查询的工厂实例,它包括了一个mapperLocations定位,以及dataSource数据库连接来源。
- mapperLocations指定了MyBatis将会搜索的路径,支持Ant风格路径。在指定的路径下,MyBatis会把读取其中的xml查询,并将用于后面的dao映射。
- dataSource是来源数据库,这里直接就是前面的连接池。
3、mapperScannerConfigurer是MyBatis用于自动建立数据库dao类的配置器。
- basePackage指定了要扫描的包名称,支持Ant风格路径。在指定的包名称下,MyBatis通过Spring,会自动发现对应包名下的dao接口,在后面需要查询时,为接口提供实现。
下图是MyBatis的大体框架,可以作为上述配置的一个补述:
也就是说,MyBatis会根据XML配置Mapper去组成数据库查询,然后把查询中所涉及的参数、返回结果,都映射成为Java对象(或元数据类型)。最后交由数据库去执行,返回。
三、dao接口
package lekko.code.test.dao;
import lekko.code.test.model.TestModel;
import org.springframework.stereotype.Repository;
/**
* 测试DAO
*/
@Repository
public interface TestDao {
TestModel getTest(String name);
int addTest(String name);
}
上面这个接口,由于属于包lekko.code.**.dao,所以会被识别为需要映射的dao。
接口只有两个方法,一个是查询getTest,一个是新增addTest。至于getTest已经根据需要,我这里提取成了一个实体类TestModel:
package lekko.code.test.model;
/**
* 测试数据类
*/
public class TestModel {
private int id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
四、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">
<mapper namespace="lekko.code.test.dao.TestDao">
<select id="getTest" resultType="lekko.code.test.model.TestModel">
select id, name from Test where name = #{name}
</select>
<insert id="addTest">
insert into Test (name, createdTime) values (#{name}, now())
</insert>
</mapper>
语法我就不详细解释了,百度一下就有。各种条件、判断、参数都有解释。我本人非常喜欢这种自由度高,sql看起来也很舒服的配置方式。
至此,大体的使用介绍已经完毕。MyBatis还是挺不错的,建议大家在业务合适的情况下试用试用。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# Spring
# MyBatis
# 详解Http请求中Content-Type讲解以及在Spring MVC中的应用
# 深入理解Spring Boot的日志管理
# spring mvc中的@PathVariable获得请求url中的动态参数
# Spring Boot统一异常处理详解
# 详解Spring中的JavaConfig注解
# SpringMVC实现controller中获取session的实例代码
# SpringMVC实现注解式权限验证的实例
# spring mvc 和ajax异步交互完整实例代码
# Spring中@Async用法详解及简单实例
# 连接池
# 的是
# 都是
# 数据库查询
# 是一个
# 我就
# 都有
# 成了
# 将会
# 在这
# 就有
# 一是
# 可以用
# 帮你
# 最喜欢
# 也很
# 并将
# 实体类
# 要对
# 所做
相关文章:
深圳网站制作的公司有哪些,dido官方网站?
如何在Ubuntu系统下快速搭建WordPress个人网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何通过服务器快速搭建网站?完整步骤解析
建站之星如何防范黑客攻击与数据泄露?
建站VPS选购需注意哪些关键参数?
建站之星客服服务时间及联系方式如何?
建站之星会员如何解锁更多建站功能?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
香港服务器如何优化才能显著提升网站加载速度?
定制建站是什么?如何实现个性化需求?
网页设计与网站制作内容,怎样注册网站?
外贸公司网站制作哪家好,maersk船公司官网?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
制作网站的公司有哪些,做一个公司网站要多少钱?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
深入理解Android中的xmlns:tools属性
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
如何在万网ECS上快速搭建专属网站?
建站之星后台管理系统如何操作?
教程网站设计制作软件,怎么创建自己的一个网站?
Python lxml的etree和ElementTree有什么区别
C#怎么创建控制台应用 C# Console App项目创建方法
高端智能建站公司优选:品牌定制与SEO优化一站式服务
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何快速搭建安全的FTP站点?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
建站之星导航如何优化提升用户体验?
如何用好域名打造高点击率的自主建站?
高端网站建设与定制开发一站式解决方案 中企动力
建站主机选虚拟主机还是云服务器更好?
如何在腾讯云免费申请建站?
如何在阿里云ECS服务器部署织梦CMS网站?
制作宣传网站的软件,小红书可以宣传网站吗?
如何通过IIS搭建网站并配置访问权限?
建站主机默认首页配置指南:核心功能与访问路径优化
制作网站的模板软件,网站怎么建设?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
做企业网站制作流程,企业网站制作基本流程有哪些?
宝塔建站后网页无法访问如何解决?
制作农业网站的软件,比较好的农业网站推荐一下?
如何续费美橙建站之星域名及服务?
建站主机空间推荐 高性价比配置与快速部署方案解析
宝塔新建站点为何无法访问?如何排查?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
*请认真填写需求信息,我们会在24小时内与您取得联系。