mybatis笔记(1)
一,什么是MyBatis?
MyBatis是Apache公司的一个开源项目iBatis,是基于Java的持久层框架,iBatis提供的持久层框架包括SQLMaps和
Data Access Object(DAO)。Mybatis主要用于解决数据库存储问题,是数据持久层框架,把实体类和SQL语句之间建立映射关系,是一种“半自动化”的ORM实现。
MyBatis使用简单的XML或注解用于配置和源文件映射,将接口和Java的普通对象(Plain Old Java Object)映射成数据库中的记录。
“半自动化”是相对于Hibernate等提供了全面数据库封装机制的全自动化ORM实现来说,“全自动”ORM实现了POJO和数据库表之间的映射和SQL的自动生成和执行。
二,MyBatis的优点
1,基于SQL语法,简单易学
2,SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度
3,程序调试方便
4,Java与SQL分离,SQL语句都定义在xml文件中,也可以通过注解的方式在接口上实现(这些映射文件为mapper)
三、Mybatis框架原理(掌握)
什么是Mybatis?
mybatis是一个持久层的框架,是apache下的顶级项目。
mybatis托管到goolecode下,后来托管到github下:mybatis Github地址
mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
Mybatis原理图:
四、Mybatis入门程序
1.建立Java项目,导入MyBatis所需要的jar包,数据库链接包,log4j包
也可以使用maven的方式导入jar
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
在数据库中建立数据表,在java类中实现与数据库字段相对应
package com.neusoft.vo; public class MyBatisStudent { private int id; private String name; private String phone; private String address; @Override public String toString() { return "MyBatisStudent [id=" + id + ", name=" + name + ", " + "phone=" + phone + ", address=" + address + "]"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public MyBatisStudent(int id, String name, String phone, String address) { super(); this.id = id; this.name = name; this.phone = phone; this.address = address; } public MyBatisStudent() { super(); } }
2,创建全局配置文件,配置数据资源,事物等MyBatis运行环境
建议第一次建该文件从源码里拷贝,然后将dtd文件复制到计算机的某个目录下,配置到eclipse.
1>

2>

<?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="db.properties"></properties> <typeAliases> <package name="com.neusoft.vo"/> </typeAliases> <!-- 配置MyBatis运行环境 --> <environments default="development"> <environment id="development"> <!-- type="JDBC"代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="JDBC"/> <!-- MyBatis提供的数据类型:POOLED --> <!-- POOLED表示支持JDBC数据源连接池 --> <dataSource type="POOLED"> <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> <!-- 加载映射文件 --> <mappers> <!-- 通过resource方法一次加载一个映射文件(映射文件路径) --> <mapper resource="com/neusoft/mapper/mybatisuser_mapper1.xml"/> </mappers> </configuration>
基础配置文件的数据源:
MyBatis提供了三种数据源类型:UNPOOLED,POOLED,JNDI
(1)UNPOOLED: 实现在每次请求的时候简单的打开或者关闭一个连接,比较慢,作为一些不需要性能和立即响应的简单应用可以选择使用
(2)POOLED : 缓存了JDBC连接对象,避免每次都要连接和生成连接实例所需要的验证时间,对于并发WEB应用很流行,因为他有最快的响应时间
(3)JNDI : 它是为了准备和Spring或应用服务一起使用,可以在外部也可以在内部配置这个资源,然后在JNDI上下文中引用它
基础配置文件——事务管理:
MyBatis有两种事物管理类型:
JDBC:直接全部使用JDBC的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域
MANAGED:将事务管理交给Spring或者JAVAEE服务器
3,创建映射文件,配置增,删,改,查的SQL语句
接口方法
package com.neusoft.mapper; import com.neusoft.vo.MyBatisStudent; public interface StudentDao { //插入对象 public void insertStudent(MyBatisStudent student); //根据id删除 public void deleteStudent(int id); //根据id更新 public void updateStudent(int id); //根据id查询 public void selectStudent(int id); }
配置映射文件
parameterType:指定输入参数的类型(例如通过id查询,则为int)
resultTYpe : 知道sql输出结果映射的java对象类型
id :接口中的方法名
#{ }表示一个占位符
#{A}:A表示接受输入的参数,根据id查询,则参数就是id
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"> <!-- namespace命名空间,作用就是对sql进行分类化管理--> <mapper namespace="test"> <!-- 插入 --> <insert parameterType="com.neusoft.vo.MyBatisStudent" id="insertStudent"> insert into mybatisstudent values (#{id},#{name},#{phone},#{address}) </insert> <!-- 删除 --> <delete parameterType="int" id="deleteStudent"> delete from mybatisstudent where id=#{id} </delete> <!-- 更新 --> <update parameterType="com.neusoft.vo.MyBatisStudent" id="updateStudent"> update mybatisstudent set name=#{name},phone=#{phone},address=#{address} where id=#{id} </update> <!--查询 --> <select parameterType="int" id="selectStudent" resultType="com.neusoft.vo.MyBatisStudent"> select * from mybatisstudent where id=#{id} </select> </mapper
4,测试,创建SqlSessionFactory工厂,创建SqlSession,执行数据库操作
package com.neusoft.test; 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; import org.junit.Test; import com.neusoft.vo.MyBatisStudent; public class TestMybatis { @Test public void insertStudent() throws IOException{ InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); MyBatisStudent student = new MyBatisStudent(); student.setId(3); student.setName("jack"); student.setPhone("222"); student.setAddress("222"); session.insert("test.insertStudent",student); session.commit(); } @Test public void deleteStudent() throws IOException{ InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); session.delete("test.deleteStudent",2); session.commit(); } @Test public void updateStudent() throws IOException{ InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); MyBatisStudent student = new MyBatisStudent(); student.setId(2); student.setName("rose"); student.setPhone("888"); student.setAddress("888"); session.update("test.updateStudent",student); session.commit(); } @Test //需要导入JUnit4 public void selectStudent() throws IOException{ InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); MyBatisStudent student = session.selectOne("test.selectStudent", 1); System.out.println(student); } }
JUnit4导入方法:
在项目上点击右键——属性——在弹出的窗口左边选择“Java Build Path”,然后在右边选择“Libraries”,再在最右边选择“Add Library...”——在弹出的对话框中选择JUnit4并确定
运行时选择JUnit Test
---------------------
版权声明:本文为CSDN博主「Chihiro_wen」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42481431/article/details/80863698

浙公网安备 33010602011771号