Mybatis 3 介绍

        主要作用就是更加便携地操作数据库

比如可以将ResultSet对象返回的数据自动封装进Entity 实体类或List 中,可以把SQL 语句配置到泊位文件中,也就是将SQL 语句与* .java 文件进行分离,使代码的分层更加明确。另外由于MyBatis 框架是使用SQL 语句对数据库进行操作的,所以可以单独对SQL语句进行优化,以提高查询效率,这点与使用Hibernate 框架相比有很大的优势,这也是为什么现阶段大部分的软件企业逐步用MyBatis 替换掉Hibernate 框架的主要原因。

 MyBatis 并不是一个独立的技术,它内部操作数据库的原理还是使用JDBC,只是对JDBC 进行了轻量级的封装。

MyBatis 是一个“持久化ORM 框架”

        持久化是指内存中的数据保存到硬盘上

ORM是指对象关系映射 (一个类对应表中的一行,属性对应表中的一列)也就是在使用MyBatis 框架时,可以将Java         类转化成数据表中的记录,或者将数据表中的记录转化成Java 类,技术原理其实就是JDBC+反射。

MyBatis 是一个“半自动化ORM 框架”

MyBatis 操作数据库时还是使用原始的SQL 语句,这些SQL 语句还是需要程序员自己来进行设计, 这就是半自动化。            在使用的方式上和全自动的Hibernate 有着非常大的区别,但正是MyBatis 属于半自动化,才更加的灵活。

下载Mybatis

    https://github.com/mybatis/mybatis-3/releases



Mybatis 基本使用

    核心:要想实现CURD 的操作,必须先要创建出SqlSessionFactory 对象

SqlSessionFactoryBuilder 创建出 SqlSessionFactory,

SqlSessionFactory 创建出 SqlSession

·     可以使用XML 方式创建SqlSessionFactory 对象,亦可以通过创建一个实例化的Configuration 对象来获得。

            代码如下:

public class Test {public static void main(String[] args) throws IOException {String configFile = "mybatis-config.xml";InputStream configStream = Resources.getResourceAsStream(configFile);SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(configStream);System.out.println(factory);}
}

控制台输出:

上面代码的主要作用就是取得SqlSessionFactory 工厂对象。

 其中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><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment></environments>
</configuration>

(  ${driver}  ${url}  ${username}  ${password} 根据实际情况修改。)

使用MyBatis 实现对mysql的CURD增删改查。

    创建 mybatisCurdMysql 项目

    下载然后添加这三个jar包


    创建数据表 userInfo

-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
  `ID` int(5) NOT NULL AUTO_INCREMENT,
  `USERNAME` varchar(20) COLLATE utf8_bin NOT NULL,
  `PASSWORD` varchar(50) COLLATE utf8_bin NOT NULL,
  `AGE` int(3) DEFAULT NULL,
  `CREATETIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES ('1', '渡西湖', '123', '18', '2018-06-16 14:26:01');
INSERT INTO `userinfo` VALUES ('2', 'duxihu', '123', '18', '2018-06-16 14:26:02');



userInfo实体类

package entity;import java.util.Date;public class Userinfo {private long id;private String username;private String password;private long age;private Date createTime;public Userinfo() {}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public long getAge() {return age;}public void setAge(long age) {this.age = age;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}}

在src路径下创建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><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><!--<property name="driver" value="com.mysql.jdbc.Driver"/>--><!--上面是旧版本mysql-connector-java 下面是新版本--><property name="driver" value="com.mysql.cj.jdbc.Driver" /><!--<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo?characterEncoding=utf8/>--><!--下面是5.7以上mysql需要指定useSSL和serverTimezone--><property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo?serverTimezone=UTC&amp;useSSL=false&amp;characterEncoding=utf8" /><property name="username" value="test" /><property name="password" value="test" /></dataSource></environment></environments><mappers><mapper resource="mapping/userinfoMapping.xml" /></mappers>
</configuration>

(注意:url中的符号&在xml中需要转义 &amp; )

其中userInfoMapper.xml 映射文件内容如下:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="userinfo"><insert id="insertUserinfo" parameterType="entity.Userinfo"useGeneratedKeys="true" keyProperty="id">insert intouserinfo(username,password,age,createTime)values(#{username},#{password},#{age},#{createTime})</insert><select id="selectById" parameterType="long" resultType="entity.Userinfo">select *from userinfo where id=#{userId}
</select><select id="selectAll" resultType="entity.Userinfo">select * from userinfo orderby id asc
</select><delete id="deleteById" parameterType="long">delete from userinfo whereid=#{userId}
</delete><update id="updateById" parameterType="entity.Userinfo">update userinfo setusername=#{username},password=#{password},age=#{age},createTime=#{createTime}where id=#{id}
</update>
</mapper>

注意:如果SQL 语句有一些特殊符号,则必须使用如下的格式    < ! [CDATA [ sql 语句]]>  

创建获取SqlSession 对象工具类 DBtools 代码如下:

package dbtools;import java.io.IOException;
import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class DBTools {public static SqlSession getSqlSession() throws IOException {String configFile = "mybatis-config.xml";InputStream configStream = Resources.getResourceAsStream(configFile);SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(configStream);return factory.openSession();}
}

创建增删改查类:


        InsertUserinfo 插入数据

package test;import dbtools.DBTools;
import entity.Userinfo;
import org.apache.ibatis.session.SqlSession;import java.io.IOException;
import java.util.Date;public class InsertUserinfo {public static void main(String[] args) throws IOException {Userinfo userinfo1 = new Userinfo();Userinfo userinfo2 = new Userinfo();userinfo1.setUsername("测试1");userinfo1.setPassword("test1");userinfo1.setAge(18);userinfo1.setCreateTime(new Date());userinfo2.setUsername("测试2");userinfo2.setPassword("test2");userinfo2.setAge(18);userinfo2.setCreateTime(new Date());SqlSession session = DBTools.getSqlSession();session.insert("insertUserinfo", userinfo1);session.insert("insertUserinfo", userinfo2);session.commit();session.close();System.out.println(userinfo1.getId());System.out.println(userinfo2.getId());}
}

selectAll查询全部

package test;import java.io.IOException;
import java.util.List;import org.apache.ibatis.session.SqlSession;import dbtools.DBTools;
import entity.Userinfo;public class SelectAll {public static void main(String[] args) throws IOException {SqlSession session = DBTools.getSqlSession();List<Userinfo> listUserinfo = session.selectList("selectAll");for (int i = 0; i < listUserinfo.size(); i++) {Userinfo userinfo = listUserinfo.get(i);System.out.println(userinfo.getId() + " " + userinfo.getUsername() + " " + userinfo.getPassword() + " "+ userinfo.getAge() + " " + userinfo.getCreateTime());}session.commit();session.close();}
}

selectById根据id查询,因为设置的id是long型,所以查询的时候是1L

package test;import java.io.IOException;import org.apache.ibatis.session.SqlSession;import dbtools.DBTools;
import entity.Userinfo;public class SelectById {public static void main(String[] args) throws IOException {SqlSession session = DBTools.getSqlSession();Userinfo userinfo = session.selectOne("selectById", 1L);System.out.println(userinfo.getId() + " " + userinfo.getUsername() + " " + userinfo.getPassword() + " "+ userinfo.getAge() + " " + userinfo.getCreateTime());session.commit();session.close();}
}

deleteById根据id删除

package test;import java.io.IOException;import org.apache.ibatis.session.SqlSession;import dbtools.DBTools;public class DeleteById {public static void main(String[] args) throws IOException {SqlSession session = DBTools.getSqlSession();session.delete("deleteById", 1L);session.commit();session.close();}
}

updateById 根据id更新数据

package test;import java.io.IOException;import org.apache.ibatis.session.SqlSession;import dbtools.DBTools;
import entity.Userinfo;public class UpdateById {public static void main(String[] args) throws IOException {SqlSession session = DBTools.getSqlSession();Userinfo userinfo = session.selectOne("selectById", 1L);userinfo.setUsername("更新测试");userinfo.setPassword("gengxinceshi");userinfo.setAge(18);session.update("updateById", userinfo);session.commit();session.close();}
}

到这里mybatis对mysql简单的增删改查就完成了

javaEE核心框架之 Mybatis ( 一 )相关推荐

  1. java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF

    资源名称:Java EE核心框架实战 高洪岩 中文PDF 第1章 MyBatis 3操作数据库 第2章 MyBatis 3常用技能 第3章 Struts 2必备开发技能 第4章 Struts 2文件的 ...

  2. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  3. 《Java EE核心框架实战》—— 2.3 resultMap 标签

    本节书摘来异步社区<Java EE核心框架实战>一书中的第2章,第2.3节,作者: 高洪岩,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.3 < re ...

  4. 【推荐】微服务分布式企业框架Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis

    摘要: 主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码生成等.采用分层设计 ...

  5. 【持久化框架】Mybatis简介与原理

    从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softwar ...

  6. mybatis学习(1):【持久化框架】Mybatis简介与原理

    从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softwar ...

  7. 微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper

    提供了常用工具进行封装,包括日志工具.缓存工具.服务器端验证.数据字典.当前组织机构数据(用户.机构.区域)以及其它常用小工具等.另外 还提供一个强大的在线 代码生成 工具,此工具提供简单的单表.一对 ...

  8. JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统(附源码)

    文章目录 JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统 一.系统介绍 二.开发步骤 三.系统展示 四.开发总结 五.数据库相关 ...

  9. struts2深入浅出(备java基础,javaweb,javaee,框架)-任亮-专题视频课程

    struts2深入浅出(备java基础,javaweb,javaee,框架)-12310人已学习 课程介绍         Struts2框架介绍.工作原理与架构分析.6大配置文件分析使用通配符定义a ...

最新文章

  1. jsp实现邮件的发送
  2. mysql 2006测试_狂神说MySQL06:事务和索引
  3. Spring配置C3P0开源连接池
  4. Java 第四周总结
  5. 详解面向对象、构造函数、原型与原型链
  6. 从计算机体系结构方面思考深度学习
  7. poj 3071 Football
  8. 大数据工具使用——安装Hadoop(多台服务器)和Hive、Hbase
  9. 技术干货 | 源码解析 Github 上 14.1k Star 的 RocketMQ
  10. Swagger介绍及使用
  11. JDK和JRE它们之间的关系及区别
  12. Adobe 发布十月补丁日仅为修复一个严重漏洞
  13. 无语!JDK 8 中的 HashMap 依然会死循环…
  14. 服务器网页源代码被修改6,特洛伊木马服务器源代码(C#)
  15. 索引缓存_如何重置您的Google桌面索引缓存
  16. 自动统计文件夹下所有音频时长与个数
  17. 【二分图匹配】矩阵游戏
  18. 本地idea连接Linux上Redis出现RedisConnectionException: Unable to connect to xxx.xxx.xxx.xxx:6379的问题
  19. Python:安装 psycopg2
  20. C/C++ return 如何实现的?return 的内部机制

热门文章

  1. Android应用开发之所有动画使用详解
  2. 2022留学生落户上海怎么办理社区公共户?
  3. 苹果手机 生成html文件,苹果手机这个功能太厉害了,1秒就能将纸质文档转换为Word...
  4. “语象观察”-爬取人民日报并统计词频
  5. 重温“卡马克谈functional programming in c++”
  6. 相似图片搜索中的均值哈希(aHash)
  7. 图片去除水印两种工具及多种思路
  8. 惠云转债上市价格预测
  9. VS2015安装完成后Visual C++的一些模板找不到,安装C++新模板
  10. channel小知识点