MyBaties --day1
今天就来聊聊这个东西 今天的主角相信大家也看到了 MyBaties 是个什么东东 它有什么作用?怎么用?好不好用今天来说说 .说到MyBaties 就不得不谈到JDBC大家可能都知道 JDBC用来操作数据库 几乎所有的项目都会跟数据库进行交互 我们传统的JDBC访问数据主要为以下几部
- 通过Class.forName()加载驱动程序
- 通过DriverManage.getConnection()获取数据库连接
- 通过Connection.createStatement()或者preparedStatement()创建操作数据库的语句对象
- 执行SQL语句
- 处理SQL语句
- 关闭资源
弊端
- 他将数据库连接的信息都写在了java代码中 不便于数据源的切换
- 频繁的创建销毁数据连接 影响了程序的性能
- java源码中出现了大量的SQL语句 不便于修改SQL
- java对象模型与数据库关系不兼容 jdbc操作数据库时存在大量的实体对象与数据库关系之间相互转换的代码 可维护性差
这时MyBaties就出现了 MyBaties是基于JDBC的持久化层框架 它对jdbc操作数据库进行了封装 我们不需要花费时间区关注如何区处理注册驱动、创建连接 创建语句对象 以及对象与数据库关系的转化之间繁琐的代码,只需要关注SQL本身 而且不需要将SQL写在源码中 直接写在XML配置文件中 是不是很神奇呢?
那么如何去使用MyBaties
1.创建java项目
2.添加相关联的依赖包
3.添加MyBaties的核心配置文件
4.创建数据库 表以及实体类
5.添加MyBaties映射文件
6.创建SqlSessionFactory对象 SqlSession对象
下载MyBaties的地址网上一搜就可以找到 https://github.com/mybatis/mybatis-3/releases
解压后会发现里面有很多jar包我们可以选择部分添加到项目中 只需要这几个就够了 现在
log4j-1.2.17.jar 这个jar包是一个java日志文件夹包
mybatis-3.5.1.jar 使用MyBateis时必用的架包
mysql-connector-java-5.1.47.jar 用来连接数据库
slf4j-api-1.7.26.jar 简单日记门面
slf4j-log4j12-1.7.26.jar

3.添加MyBaties核心配置文件 这里主要是 配置数据库的连接信息和 关联映射的文件
添加日志组件log4j的配置文件log4j.propertis至classpath根目录下,用于输出MyBatis执行过程中的日志信息。这里的
com/newroad/dao/StudentMapper.xml 是StudentMapper.xml文件的路径不能写错了
<!-- 关联隐射文件 -->
<mappers>
<mapper resource="com/newroad/dao/StudentMapper.xml"/>
</mappers>

<?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="d1">
<environment id="d1">
<!-- 配置事务管理器 -->
<transactionManager type="JDBC" />
<!-- 配置数据源以及数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/fresh?characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments> <!-- 关联隐射文件 -->
<mappers>
<mapper resource="com/newroad/dao/StudentMapper.xml"/>
</mappers> </configuration>
4.创建数据库、表以及实体类
package com.newroad.entity;
public class Student {
private Integer id;
private String name;
private String password;
private String email;
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + "]";
}
public Student(Integer id, String name, String password, String email) {
super();
this.id = id;
this.name = name;
this.password = password;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
5.创建StudentMapper.xml 的映射文件 MyBatis映射文件是一个XML文件,在这个XML文件中可以 我们可以写要执行的SQL语句
3 <!-- namespace必須属性 使用mybaties时通过namespace的值找到 Mapper文件 -->
4 <mapper namespace="com.newroad.dao.StudentMapper"> 这一步很重要 是一个必须的属性
<?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">
<!-- namespace必須属性 使用mybaties时通过namespace的值找到 Mapper文件 -->
<mapper namespace="com.newroad.dao.StudentMapper">
<!-- 添加用户信息 -->
<insert id="save">
insert into student(id,name,password,email) values (#{id},#{name},#{password},#{email})
</insert> <!-- 删除学生信息通过ID -->
<delete id="deleteById" >
delete from student where id=#{id}
</delete> <!-- 修改学生信息 -->
<update id="updateById">
update student set name=#{name},password=#{password},email=#{email} where id=#{id}
</update>
<!-- 查询学生信息 -->
<!-- 根据学号查询学生信息 -->
<!-- resultType | resultMap 这两个属性必须二选一 指的是将查询到的数据转换成怎样的pojo对象 -->
<select id="selectByid" resultType="com.newroad.entity.Student">
select *from student where id=#{id} </select> <!-- 查询所有学生信息 -->
<select id="selectAll" resultType="com.newroad.entity.Student">
select *from student </select> <!--分页查询 -->
<select id="selectByPages" resultType="com.newroad.entity.Student">
select *from student limit #{pageNum},#{pageSize}
</select> </mapper>
6.创建SqlSessionFactory、SqlSession对象
注意: int num = session.insert("com.newroad.dao.StudentMapper.save", stu);
这里的 com.newroad.dao.StudentMapper 对应着StudentMapper.xml映射文件中的 namespace的值 而后面的save 对应id的名字一定要相同
package com.newroad.test; import static org.junit.Assert.assertEquals;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before; import org.junit.Test; import com.newroad.entity.Student; public class Test2 {
// 获取连接配置对象
InputStream in = Test2.class.getResourceAsStream("/mybatis-config.xml");
// 创建sqlsessionFactoryBuilder
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSession session; @Before // 在每个test方法执行之前都会执行这个方法
public void init() {
session = factory.openSession();
} @Test // 测试的方法
public void test() {
Student stu = new Student(12, "pan", "10086", "123432@qq.com");
int num = session.insert("com.newroad.dao.StudentMapper.save", stu);
// 断言结果 如果结果为1 成功
assertEquals(num, 1); } @Test
public void deleteById() {
int num = session.delete("com.newroad.dao.StudentMapper.deleteById", 6);
System.out.println("num=" + num);
assertEquals(num, 1);
} @Test
public void selectOne() {
Student stu = session.selectOne("com.newroad.dao.StudentMapper.selectByid", 4);
System.out.println("num=" + stu);
assertEquals(stu, 1);
} @Test
public void listStudent() {
List<Student> students = session.selectList("com.newroad.dao.StudentMapper.selectAll");
students.forEach(stu -> System.out.println(stu)); } @After // 在每个test方法执行后就会执行
public void close() {
session.commit();
session.close();
} }
MyBaties --day1的更多相关文章
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- day1
day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...
- myBaties 和 mysql开发中遇到的问题
最近开发内部平台遇到mysql 中的一个问题,order by语句需要在limit 之后. myBaties在parameterType="java.lang.String" 不能 ...
- day1作业--登录入口
作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- mybaties # , $
mybaties会对#引入的值加上双引号, 如: #{buildingName} -------->"buildingName";mybaties会将$引入的值直接显示到sq ...
- springMVC 缓存(入门 spring+mybaties+redis一)
使用redis之前需要咋电脑上安装redis: 使用spring+mybaties+redis的本质是扩展类 org.apache.ibatis.cache.Cache:在我们自己扩展的Cache ...
- mybaties 的一些点
resultMap resutType mybaties缓存 待续 mybaties对应关系是bean和数据库字段的对应. 1.mybaties 的返回值是对象的话定义为resultMap=" ...
- Python学习路程day1
变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...
随机推荐
- 将Python的Django框架与认证系统整合的方法
将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...
- 第三章 授权——《跟我学Shiro》
转发地址:https://www.iteye.com/blog/jinnianshilongnian-2020017 目录贴:跟我学Shiro目录贴 授权,也叫访问控制,即在应用中控制谁能访问哪些资源 ...
- 【C# 开发技巧】如何防止程序多次运行
一.引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c0 ...
- 图形学入门(3)——区域填充算法(region filling)
继续图形学之旅,我们已经解决了如何画线和画圆的问题,接下来要解决的是,如何往一个区域内填充颜色?对一个像素填充颜色只需调用SetPixel之类的函数就行了,所以这个问题其实就是:如何找到一个区域内的所 ...
- Java线程池的使用方式,核心运行原理、以及注意事项
为什么需要线程池 java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率. 为了解决上面的问题,java中引入了线程池,可以使创 ...
- 滑动窗口协议(Sliding Window Protocol)
滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生.该协议允许发送方在停止并等待确认前发送多个数据分组.由于发送方 ...
- ConcurrentHashMap能完全替代HashTable吗?
至此你应该能够明白,ConcurrentHashMap与HashTable都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间.因为C ...
- Excel关联匹配函数
1.=VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup]) lookup_value 相当于python中的键,用来 ...
- Python selenium常用用法
1.获取当前页面的Url 方法:current_url 实例:driver.current_url 2.获取元素坐标 方法:location 解释:首先查找到你要获取元素的,然后调用location方 ...
- Spring Cloud Ribbon说明
浅谈Spring Cloud Ribbon的原理 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Clo ...