(二)Mybatis总结之通过Dao层与数据交互
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导入相应依赖
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
Maven要按照大佬博客说的配置,接下来file-->settings-->Maven-->Maven home directory设置为
Maven安装包路径
然后user settings file 设置为安装包路径
\conf\settings.xml,否则导依赖失败
2.mybatis核心配置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>
<properties resource="mysql.properties"/>
<settings>
<!--全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载,默认值为false-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认值为true-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<typeAliases>
<!-- 其实就是将bean的替换成一个短的名字-->
<typeAlias type="com.qf.pojo.User" alias="User"/>
</typeAliases>
<!--对事务的管理和连接池的配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"><!--POOLED:使用Mybatis自带的数据库连接池来管理数据库连接-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--mapping文件路径配置-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
3.配置mysql.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/demo1?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
jdbc.username=root
jdbc.password=123456
其中?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
是为了防止乱码而加的
4.配置映射文件,以下有增删改查sql语句
<?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="com.qf.mybatisdemo.pojo.User">
<!--部分查询->
<select id="getUserByName" resultType="com.qf.mybatisdemo.pojo.User" parameterType="java.lang.String">
SELECT * FROM USER where username = #{username}
</select>
<insert id="addUser" parameterType="com.qf.mybatisdemo.pojo.User" >
insert into USER(username,age) values(#{username},#{age})
</insert>
<update id="updateUserAge" parameterType="com.qf.mybatisdemo.pojo.User">
update user set age=#{age} where username=#{username}
</update>
<delete id="deleUser" parameterType="com.qf.mybatisdemo.pojo.User">
delete from user where username=#{username} and age=#{age}
</delete>
</mapper>
5.创建与数据库表的字段对应的实体类
package com.qf.mybatisdemo.pojo;
public class User {
String username;
int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", age=" + age +
'}';
}
}
6.创建会话(dao层与数据库交互数据的介质)接口
package com.qf.mybatisdemo.dao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class BaseDao {
public SqlSession getSqlSession() {
String fileName = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(fileName);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
7.增删改查接口
package com.qf.mybatisdemo.dao;
import com.qf.mybatisdemo.pojo.User;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class UserDao extends BaseDao{
User user;
/**
* 根据名字查询
*/
public User getUserByName(String userName) {
SqlSession sqlSession = this.getSqlSession();
user = sqlSession.selectOne("getUserByName",userName);
return user;
}
/**
* 增
*/
public int addUser(User user) {
int count = 0;
SqlSession sqlSession = this.getSqlSession();
count = sqlSession.insert("addUser",user);
sqlSession.commit();
return count;
}
/**
* 改
*/
public int updateUserAge(User user) {
int count= 0;
SqlSession sqlSession = this.getSqlSession();
count = sqlSession.update("updateUserAge",user);
sqlSession.commit();
return count;
}
/**
* 删除
*/
public int deleUser(User user) {
int count= 0;
SqlSession sqlSession = this.getSqlSession();
count = sqlSession.update("deleUser",user);
sqlSession.commit();
return count;
}
}
8.测试类
package com.qf.mybatisdemo;
import com.qf.mybatisdemo.dao.UserDao;
import com.qf.mybatisdemo.pojo.User;
import org.junit.Test;
import javax.jws.soap.SOAPBinding;
public class TestMybatis {
UserDao userDao;
/**
* 根据名字查询
*/
@Test
public void getUserByName () {
User user;
user = userDao.getUserByName("张三");
System.out.println(user);
}
public static void main(String[] args) {
UserDao userDao = new UserDao();
/**
* 增
*/
// User user = new User();
// int count = 0;
// user.setAge(18);
// user.setUsername("小风");
// count = userDao.addUser(user);
// System.out.println(count);
/**
* 改
*/
// User user = new User();
// int count = 0;
// user.setAge(20);
// user.setUsername("小风");
// count = userDao.updateUserAge(user);
// System.out.println("新的"+count);
/**
* 删
*/
User user = new User();
int count = 0;
user.setAge(20);
user.setUsername("小风");
count = userDao.deleUser(user);
System.out.println(count);
}
}
(二)Mybatis总结之通过Dao层与数据交互的更多相关文章
- 关于mysql,需要掌握的基础(二):JDBC和DAO层
目录 关于mysql,需要掌握的基础(二):JDBC和DAO层 1.了解jdbc是什么? 2.加载注册驱动:为什么Class.forName("com.mysql.jdbc.Driver ...
- SSM框架之Mybatis(3)dao层开发
Mybatis(3)dao层开发 以实现类完成CRUD操作 1.持久层dao层接口的书写 src\main\java\dao\IUserDao.java package dao; import dom ...
- controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化
controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化
- Java秒杀简单设计二:数据库表和Dao层设计
Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表 https://www.cnblogs.com/taiguyiba/p/9791431.html ...
- mybatis mapper接口开发dao层
本文将探讨使用 mapper接口,以及 pojo 包装类进行 dao 层基本开发 mybatis dao 层开发只写 mapper 接口 其中需要 开发的接口实现一些开发规范 1. UserMappe ...
- mybatis generator 自动生成dao层映射代码
资源: doc url :http://www.mybatis.org/generator/ download:https://github.com/mybatis/generator/release ...
- Mybatis框架三:DAO层开发、Mapper动态代理开发
这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...
- 0 - Dao层(数据访问层设计)
1. Dao 使用接口设计 2. Dao 没有实现代码, 使用模板实现(通过DynamicProxy+Dapper) 3. 模板格式暂定使用Ader Template 来自为知笔记(Wiz)
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
随机推荐
- Windows堆思维导图--Windows pro sp3
http://bbs.pediy.com/showthread.php?p=1445192#post1445192
- 在Windows上安装Nexus
在Windows上安装Nexus 学习了:https://www.cnblogs.com/yucongblog/p/6696736.html 下载地址:https://sonatype-downloa ...
- Apache2 Web 服务器
Apache2 Web 服务器的安装 sudo apt install apache2 -y 当安装Apache2包之后,Apache2相关的服务是启用的,并在重启后自动运行.在某些情况下如果你的Ap ...
- SSLStrip 终极版 —— location 瞒天过海
之前介绍了 HTTPS 前端劫持 的方案,尽管非常有趣.然而现实却并不理想. 其唯一.也是最大的缺陷.就是无法阻止脚本跳转.若是没有这个缺陷,那就非常完美了 -- 当然也就没有必要写这篇文章了. 说究 ...
- openstack(2) -------RabbitMQ集群部署
一.RabbitMQ简介 RabbitMQ属于一个流行的开源消息队列系统.属于AMQP( 高级消息队列协议 ) 标准的一个 实现.是应用层协议的一个开放标准,为面向消息的中间件设计.用于在分布式系统中 ...
- .a 文件解析
首先先准备一个静态库.a文件,比如叫staticLibrary.a,放在桌面的test目录里. 分离arch 首先先file一下staticLibrary.a,看一下该文件包含几种arch. ~ cd ...
- docker init 起步
#yum install wget http://fedora.mirror.nexicom.net/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y ...
- 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...
- Android ListView的item点击无响应的解决方法
假设listitem里面包含button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最经常使用的解决的方法 是在listitem的布局文件里设置des ...
- Android学习笔记-传感器开发之利用传感器和Tween开发简易指南针
本次我们学习Android传感器的开发,前面已经介绍过了,tween的使用,所以,我们可以结合传感器与tween动画,开发简易的指南针. 首先先介绍一下传感器的相关知识, 在Android应用程序中使 ...