今天就来聊聊这个东西 今天的主角相信大家也看到了 MyBaties  是个什么东东 它有什么作用?怎么用?好不好用今天来说说 .说到MyBaties 就不得不谈到JDBC大家可能都知道 JDBC用来操作数据库 几乎所有的项目都会跟数据库进行交互 我们传统的JDBC访问数据主要为以下几部

  1. 通过Class.forName()加载驱动程序
  2. 通过DriverManage.getConnection()获取数据库连接
  3. 通过Connection.createStatement()或者preparedStatement()创建操作数据库的语句对象
  4. 执行SQL语句
  5. 处理SQL语句
  6. 关闭资源

弊端

  1. 他将数据库连接的信息都写在了java代码中 不便于数据源的切换
  2. 频繁的创建销毁数据连接 影响了程序的性能
  3. java源码中出现了大量的SQL语句 不便于修改SQL
  4. 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的更多相关文章

  1. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  2. day1

    day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...

  3. myBaties 和 mysql开发中遇到的问题

    最近开发内部平台遇到mysql 中的一个问题,order by语句需要在limit 之后. myBaties在parameterType="java.lang.String" 不能 ...

  4. day1作业--登录入口

    作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...

  5. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  6. mybaties # , $

    mybaties会对#引入的值加上双引号, 如: #{buildingName} -------->"buildingName";mybaties会将$引入的值直接显示到sq ...

  7. springMVC 缓存(入门 spring+mybaties+redis一)

    使用redis之前需要咋电脑上安装redis: 使用spring+mybaties+redis的本质是扩展类   org.apache.ibatis.cache.Cache:在我们自己扩展的Cache ...

  8. mybaties 的一些点

    resultMap resutType mybaties缓存 待续 mybaties对应关系是bean和数据库字段的对应. 1.mybaties 的返回值是对象的话定义为resultMap=" ...

  9. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

随机推荐

  1. springboot拦截json后缀的请求,返回json数据

    需求:请求list.json返回以下数据 { "jsonResult": { "code": 200, "message": "查 ...

  2. Spring Boot使用过滤器Filter

    首先创建一个测试用的controller:TestController: package com.zifeiy.test.controller; import org.springframework. ...

  3. 【计算机视觉】Object Proposal之BING理解

    发现: 本论文主要有两大亮点.第一个亮点是发现了在固定窗口的大小下,物体与背景的梯度模式有所不同.如图1所示.图1(a)中绿框代表背景,红框代表物体.如果把这些框都resize成固定大小,比如8X8, ...

  4. canvas画箭头demo

    效果图: 代码: <!DOCTYPE html> <html> <title>canvas画箭头demo</title> <body> &l ...

  5. vba Excel连接数据库

    PostgreSql: 第一步 在网上下载postres的驱动程序,之后安装,下载地址:https://www.devart.com/odbc/postgresql/download.html 第二步 ...

  6. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验三《敏捷开发与XP实践》 实验报告

    实验内容与要求 1.XP基础 极限编程(Extreme Programming,XP)是一种全新而快捷的软件开发方法.XP团队使用现场客户.特殊计划方法和持续测试来提供快速的反馈和全面的交流: XP是 ...

  7. Linux由于物理节点故障导致的异常重启-Case1

    问题描述:Linux VM异常重启,需要排查问题原因 排查结果: 查询Messages日志获取到的信息 虚拟机内核版本: Jun :: test01 kernel: Linux version -.e ...

  8. 利用Python进行数据分析_Pandas_数据结构

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 首先,需要导入pandas库的Series和DataFrame In [21] ...

  9. Python学习5——抽象,涉及抽象和结构、函数的自定义、参数、作用域、递归

    此处将抽象和结构.自定义函数.参数的使用.作用域.递归放在一起学习,看起来很怪是不是? 但实际上这几者之间是有紧密联系的,不然Python基础教程(第三版)的作者为什么会把它们放在一起哪?手动滑稽 好 ...

  10. mysql中char和varchar区别

    char是一种固定长度的类型,varchar则是一种可变长度的类型  char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些 ...