Mybatis概述

定义: Mybatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。

  • Mybatis是(半自动的)跟数据库打交道的orm(object relationship mapping 对象 关系 映射)框架.
  • MyBatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC(Java数据库连接),使开发者只需关注 SQL 语句本身,而不用再花费精力去处理诸如注册驱动、创建 Connection、配置 Statement 等繁杂过程。

对框架的粗浅理解

框架作用:解耦,即降低耦合度,减少开发时间(偷懒)的东西,但是并不代表框架的运行速度很高。以下两个原则是框架的重要思想。

重构原则:事不过三,三则重构(有三个地方代码重复)

  • “高内聚低耦合”做法:

    • 写且只写一次
    • 一个类只做一种事
    • 一个方法只做一件事

Mybatis的特点

  • Sql语句写在XML文件中,实现了代码与Sql分离,降低耦合度
  • 半自动的mybatis更利于开发人员设计Sql语句
  • 简单易学
  • 支持动态Sql

Mybatis配置和初步使用

Mybatis通过dao层与数据交互

1.pom.xml导入相应依赖

  1. <!-- mybatis核心包 -->
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.3.0</version>
  6. </dependency>
  7. <!-- mysql驱动包 -->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>5.1.40</version>
  12. </dependency>

Maven要按照大佬博客说的配置,接下来file-->settings-->Maven-->Maven home directory设置为Maven安装包路径

然后user settings file 设置为安装包路径\conf\settings.xml,否则导依赖失败

2.mybatis核心配置mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <properties resource="mysql.properties"/>
  7. <settings>
  8. <!--全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载,默认值为false-->
  9. <setting name="lazyLoadingEnabled" value="true"/>
  10. <!--当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认值为true-->
  11. <setting name="aggressiveLazyLoading" value="false"/>
  12. </settings>
  13. <typeAliases>
  14. <!-- 其实就是将bean的替换成一个短的名字-->
  15. <typeAlias type="com.qf.pojo.User" alias="User"/>
  16. </typeAliases>
  17. <!--对事务的管理和连接池的配置-->
  18. <environments default="development">
  19. <environment id="development">
  20. <transactionManager type="JDBC"></transactionManager>
  21. <dataSource type="POOLED"><!--POOLED:使用Mybatis自带的数据库连接池来管理数据库连接-->
  22. <property name="driver" value="${jdbc.driver}"/>
  23. <property name="url" value="${jdbc.url}"/>
  24. <property name="username" value="${jdbc.username}"/>
  25. <property name="password" value="${jdbc.password}"/>
  26. </dataSource>
  27. </environment>
  28. </environments>
  29. <!--mapping文件路径配置-->
  30. <mappers>
  31. <mapper resource="mapper/UserMapper.xml"/>
  32. </mappers>
  33. </configuration>

3.配置mysql.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://127.0.0.1:3306/demo1?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
  3. jdbc.username=root
  4. jdbc.password=123456

其中?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8是为了防止乱码而加的

4.配置映射文件,以下有增删改查sql语句

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.qf.mybatisdemo.pojo.User">
  6. <!--部分查询->
  7. <select id="getUserByName" resultType="com.qf.mybatisdemo.pojo.User" parameterType="java.lang.String">
  8. SELECT * FROM USER where username = #{username}
  9. </select>
  10. <insert id="addUser" parameterType="com.qf.mybatisdemo.pojo.User" >
  11. insert into USER(username,age) values(#{username},#{age})
  12. </insert>
  13. <update id="updateUserAge" parameterType="com.qf.mybatisdemo.pojo.User">
  14. update user set age=#{age} where username=#{username}
  15. </update>
  16. <delete id="deleUser" parameterType="com.qf.mybatisdemo.pojo.User">
  17. delete from user where username=#{username} and age=#{age}
  18. </delete>
  19. </mapper>

5.创建与数据库表的字段对应的实体类

  1. package com.qf.mybatisdemo.pojo;
  2. public class User {
  3. String username;
  4. int age;
  5. public String getUsername() {
  6. return username;
  7. }
  8. public void setUsername(String username) {
  9. this.username = username;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. public void setAge(int age) {
  15. this.age = age;
  16. }
  17. @Override
  18. public String toString() {
  19. return "User{" +
  20. "username='" + username + '\'' +
  21. ", age=" + age +
  22. '}';
  23. }
  24. }

6.创建会话(dao层与数据库交互数据的介质)接口

  1. package com.qf.mybatisdemo.dao;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.Reader;
  8. public class BaseDao {
  9. public SqlSession getSqlSession() {
  10. String fileName = "mybatis-config.xml";
  11. Reader reader = null;
  12. try {
  13. reader = Resources.getResourceAsReader(fileName);
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }
  17. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  18. SqlSession sqlSession = sqlSessionFactory.openSession();
  19. return sqlSession;
  20. }
  21. }

7.增删改查接口

  1. package com.qf.mybatisdemo.dao;
  2. import com.qf.mybatisdemo.pojo.User;
  3. import org.apache.ibatis.session.SqlSession;
  4. import java.util.List;
  5. public class UserDao extends BaseDao{
  6. User user;
  7. /**
  8. * 根据名字查询
  9. */
  10. public User getUserByName(String userName) {
  11. SqlSession sqlSession = this.getSqlSession();
  12. user = sqlSession.selectOne("getUserByName",userName);
  13. return user;
  14. }
  15. /**
  16. * 增
  17. */
  18. public int addUser(User user) {
  19. int count = 0;
  20. SqlSession sqlSession = this.getSqlSession();
  21. count = sqlSession.insert("addUser",user);
  22. sqlSession.commit();
  23. return count;
  24. }
  25. /**
  26. * 改
  27. */
  28. public int updateUserAge(User user) {
  29. int count= 0;
  30. SqlSession sqlSession = this.getSqlSession();
  31. count = sqlSession.update("updateUserAge",user);
  32. sqlSession.commit();
  33. return count;
  34. }
  35. /**
  36. * 删除
  37. */
  38. public int deleUser(User user) {
  39. int count= 0;
  40. SqlSession sqlSession = this.getSqlSession();
  41. count = sqlSession.update("deleUser",user);
  42. sqlSession.commit();
  43. return count;
  44. }
  45. }

8.测试类

  1. package com.qf.mybatisdemo;
  2. import com.qf.mybatisdemo.dao.UserDao;
  3. import com.qf.mybatisdemo.pojo.User;
  4. import org.junit.Test;
  5. import javax.jws.soap.SOAPBinding;
  6. public class TestMybatis {
  7. UserDao userDao;
  8. /**
  9. * 根据名字查询
  10. */
  11. @Test
  12. public void getUserByName () {
  13. User user;
  14. user = userDao.getUserByName("张三");
  15. System.out.println(user);
  16. }
  17. public static void main(String[] args) {
  18. UserDao userDao = new UserDao();
  19. /**
  20. * 增
  21. */
  22. // User user = new User();
  23. // int count = 0;
  24. // user.setAge(18);
  25. // user.setUsername("小风");
  26. // count = userDao.addUser(user);
  27. // System.out.println(count);
  28. /**
  29. * 改
  30. */
  31. // User user = new User();
  32. // int count = 0;
  33. // user.setAge(20);
  34. // user.setUsername("小风");
  35. // count = userDao.updateUserAge(user);
  36. // System.out.println("新的"+count);
  37. /**
  38. * 删
  39. */
  40. User user = new User();
  41. int count = 0;
  42. user.setAge(20);
  43. user.setUsername("小风");
  44. count = userDao.deleUser(user);
  45. System.out.println(count);
  46. }
  47. }

(二)Mybatis总结之通过Dao层与数据交互的更多相关文章

  1. 关于mysql,需要掌握的基础(二):JDBC和DAO层

    ​ 目录 关于mysql,需要掌握的基础(二):JDBC和DAO层 1.了解jdbc是什么? 2.加载注册驱动:为什么Class.forName("com.mysql.jdbc.Driver ...

  2. SSM框架之Mybatis(3)dao层开发

    Mybatis(3)dao层开发 以实现类完成CRUD操作 1.持久层dao层接口的书写 src\main\java\dao\IUserDao.java package dao; import dom ...

  3. controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化

    controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化

  4. Java秒杀简单设计二:数据库表和Dao层设计

    Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表  https://www.cnblogs.com/taiguyiba/p/9791431.html ...

  5. mybatis mapper接口开发dao层

    本文将探讨使用 mapper接口,以及 pojo 包装类进行 dao 层基本开发 mybatis dao 层开发只写 mapper 接口 其中需要 开发的接口实现一些开发规范 1. UserMappe ...

  6. mybatis generator 自动生成dao层映射代码

    资源: doc url :http://www.mybatis.org/generator/ download:https://github.com/mybatis/generator/release ...

  7. Mybatis框架三:DAO层开发、Mapper动态代理开发

    这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...

  8. 0 - Dao层(数据访问层设计)

    1. Dao 使用接口设计 2. Dao 没有实现代码, 使用模板实现(通过DynamicProxy+Dapper) 3. 模板格式暂定使用Ader Template 来自为知笔记(Wiz)

  9. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

随机推荐

  1. Windows堆思维导图--Windows pro sp3

    http://bbs.pediy.com/showthread.php?p=1445192#post1445192

  2. 在Windows上安装Nexus

    在Windows上安装Nexus 学习了:https://www.cnblogs.com/yucongblog/p/6696736.html 下载地址:https://sonatype-downloa ...

  3. Apache2 Web 服务器

    Apache2 Web 服务器的安装 sudo apt install apache2 -y 当安装Apache2包之后,Apache2相关的服务是启用的,并在重启后自动运行.在某些情况下如果你的Ap ...

  4. SSLStrip 终极版 —— location 瞒天过海

    之前介绍了 HTTPS 前端劫持 的方案,尽管非常有趣.然而现实却并不理想. 其唯一.也是最大的缺陷.就是无法阻止脚本跳转.若是没有这个缺陷,那就非常完美了 -- 当然也就没有必要写这篇文章了. 说究 ...

  5. openstack(2) -------RabbitMQ集群部署

    一.RabbitMQ简介 RabbitMQ属于一个流行的开源消息队列系统.属于AMQP( 高级消息队列协议 ) 标准的一个 实现.是应用层协议的一个开放标准,为面向消息的中间件设计.用于在分布式系统中 ...

  6. .a 文件解析

    首先先准备一个静态库.a文件,比如叫staticLibrary.a,放在桌面的test目录里. 分离arch 首先先file一下staticLibrary.a,看一下该文件包含几种arch. ~ cd ...

  7. docker init 起步

    #yum install wget http://fedora.mirror.nexicom.net/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y ...

  8. 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)

    Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...

  9. Android ListView的item点击无响应的解决方法

    假设listitem里面包含button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最经常使用的解决的方法 是在listitem的布局文件里设置des ...

  10. Android学习笔记-传感器开发之利用传感器和Tween开发简易指南针

    本次我们学习Android传感器的开发,前面已经介绍过了,tween的使用,所以,我们可以结合传感器与tween动画,开发简易的指南针. 首先先介绍一下传感器的相关知识, 在Android应用程序中使 ...