专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
51好读  ›  专栏  ›  java那些事

mybatis如何半自动化解耦

java那些事  · 公众号  · Java  · 2019-03-06 16:00

正文

请到「今天看啥」查看全文


= "addUserInfo" resultType = "demo.mybatis.entity.UserInfo" >
INSERT INTO user_info(user_name,user_addr)VALUES(#{user_name},#{user_addr})
select >


< select id = "delUserInfoById" resultType = "demo.mybatis.entity.UserInfo" >
DELETE FROM user_info WHERE user_id=#{user_id}
select >
mapper >


显而易见,这就SQL的增删改查。

通过如上分析,我们在文章开始提出的三个问题,现在基本可以解决了。

Q3:Mybatis为什么能实现松耦合?

从如上分析,我们知道,使用mybatis作为ORM框架开发时,我们的SQL语句都写在xml配置文件中(如上文的userInfo-config.xml),从而解决了传统硬编码的强耦合问题,巧妙地实现了从“硬编码”到“软编码”的过程。

除了松耦合的好处之外,有经验的开发人员应该清楚,硬编码存在一个重大问题,即当改变SQL代码后,需要重新编译、打包、部署等后,程序方可运行起来,而通过可配置化的xml方式实现的SQL语句,却不需要。

Q4:为什么半自动化的Mybatis比自动化的Hibernate受欢迎?

从功能上讲,Hibernate是非常强大的,但其有存在一些比较难以解决的问题:

  • 学习成本大:对于新手,学习Hibernate的时间成本比Mybatis大很多,Mybatis很快就上手了

  • 笨重:Hibernate强大的另一面,折射出其笨重的一面

  • 封装SQL:Hibernate封装SQL,只向用户提供API接口,是造成其不灵活的根本因素

然而,mybatis却将SQL独立出来,让用户自定义。

通过如上对比,之所以说Hibernate自动化,因为SQL生成,解析,执行等都是由Hibernate自动生成的;

之所以说Mybatis半自动化,是因为SQL语句需要用户自定义,SQL的解析,执行等工作由Mybatis执行。

可以这么说,传统的jdbc是手工的,Hibernate是自动化的,而Mybati是基于jdbc和Hibernate的半自动化ORM框架。

二、完整Mybatis CRUD

创建Web Application项目

打开Intellij IDEA=>Create New Project=>Java Enterprise=>勾选 Web Application=>Next=>

给项目命名MybatisCRUD=>Finish

导入jar包

这里主要导入两个jar包:MySQL驱动jar包和Mybatis jar包

Project Structure(Ctrl+Alt+Shift+S)=>Modules=>MybatisCRUD=>Dependencies=>选择 JARS or directories…

成功导入后的结构如下:

创建测试数据


#创建数据库
DROP DATABASE IF EXISTS db_test
CREATE DATABASE db_test

#创建数据表
DROP TABLE IF EXISTS User_Info

CREATE TABLE user_info
(
user_id INT ( 5 ) AUTO_INCREMENT PRIMARY KEY NOT NULL , #用户id
user_name VARCHAR ( 50 ) NOT NULL , #用户名
user_addr VARCHAR ( 100 ) NOT NULL #地址
)

#插入模拟数据
INSERT INTO user_Info(user_name,user_addr)
VALUES ( 'A' , 'SH-PuDong' ),( 'B' , 'SH-YangPu' ),
( 'C' , 'SH-QingPu' ),( 'D' , 'SH-XuHui' )


创建UserInfo实体


package demo.mybatis.entity;

public class UserInfo {
String user_name;
String user_addr;

public String getUser_name () {
return user_name;
}

public void setUser_name (String user_name) {
this






请到「今天看啥」查看全文