MyBatis基础环境搭建配置、实现对数据库的增删改查
MyBatis基础
一.概述
MyBaits 本是apache的一个开源项目叫iBatis, 2010年这个项目由apache软件基金组织迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的数据持久层(数据库访问层)框架。属于MVC框架中的m层(entity+dao)
核心:MyBaits 把实体类和SQL语句之间建立了映射关系,是一种ORM实现。(ORM Object Relational Mapping 对象关系映射)
二.MyBatis的特点:
1.SQL和java代码分离出去,提供配置(sql)文件
2.提供配置文件,配置与数据库链接以及sql语句
3.Mybatis将基本的JDBC常用接口封装,对外提供操作即可。
4.提供一些数据库操作接口
三.MyBatis环境搭建
基础包结构:
3.1导包
1.pom.xml导入mysql驱动包
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
2.pom.xml导入mybatis.jar
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
3.2配置mybatis主配置文件
3.2.1:mybatis-config.xml配置属性、设置、别名
<configuration>
<!-- environments配置多个数据库链接,id名区分,但实际运行时,只能加载一个 -->
<environments default="development">
<environment id="development">
<!-- 事物管理,默认使用JDBC事物关系 -->
<transactionManager type="JDBC">
</transactionManager>
<!-- 数据源,链接数据库配置 -->
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/kj_db?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ff/mybatisPro/mapper/StudentMapper.xml" />
</mappers>
</configuration>
3.2.2:StudentMapper配置编写sql的xml文件
<mapper namespace="com.ff.mybatisPro.mapper.StudentMapper">
<insert id="saveStudent">
insert into t_student(num,name,age)values(100,'jim',22)
</insert>
</mapper>
3.3进行测试
package com.ff.mybatisPro.test;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test1 {
public static void main(String[] args) {
try {
//读取配置文件
Reader reader =Resources.getResourceAsReader("mybatis-config.xml");
//创建SqlSessionFactory,主要用于创建SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();//默认不自动提交事物
//访问调用mapper中的sql
sqlSession.insert("com.ff.mybatisPro.mapper.StudentMapper.saveStudent");
//事物提交
sqlSession.commit();
//关闭连接
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
SqlSessionFactory接口
创建SqlSessionFactory,主要用于创建SqlSession,一旦创建,SqlSessionFactory 就会在整个应用过程中始终存在。所以没有理由去销毁和再创建它,一个应用运行中也不建议多次创建SqlSessionFactory只有一个。如果真的那样做,会显得很耗时。
SqlSession接口
mybatis中使用SqlsessionFactory的openSession方法创建。 创建SqlSession,sqlSession负责每次与数据进行会话,多例的,用完后销毁,提供了一系列增、删、改、查的方法。Sqlsession意味着创建数据库会话,该接口中封装了对数据库操作的方法,与数据库会话完成后关闭会话。
3.4运行结果
运行Test1.class文件进行测试,t_student数据库中数据添加成功
四.MapperXML配置
4.1.properties 元素
它们都是外部化,可替代的属性。可以配置在一个典型的 Java 属性文件中,或者通过 properties 元素的子元素进行配置,上图是第一种方式,下列是展示另一种方式
1.在com.ff.mybatisPro.entity包下创建Student类,属性对应数据库表中列名
2.书写配置文件:db.properties
#database
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///kj_db?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
#upload file path
path=F:/apache-tomcat-9.0.22/webapps/userFile
3.在mybatis-config.xml中增加如下代码:
<!-- 加载属性文件 -->
<properties resource="config.properties">
</properties>
4.StudentMapper.xml修改
<insert id="saveStudent" parameterType=" com.ff.mybatisPro.entity.Student">
insert into t_student(num,name,age)values(#{num},#{name},#{age})
</insert>
5.运行Test1结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWc9NEAI-1576512888592)(E:\javaEE笔记\img\QQ浏览器截图20191216161804.png)]
4.2.typeAliases 元素
别名是一个较短的 Java 类型的名称。这只是与 XML 配置文件相关联,减少输入多余的完整类名。
1.在com.ff.mybatisPro.entity包下创建Student类,属性对应数据库表中列名
2.在mybatis-config.xml中增加如下代码:
<!-- 给类名配置别名或简称 -->
<typeAliases>
<typeAlias type="com.ff.mybatisPro.entity.Student" alias="student"/>
</typeAliases>
3.在mybatis-config.xml中增加如下代码:
<insert id="saveStudent" parameterType="student">
insert into t_student(num,name,age)values(#{num},#{name},#{age})
</insert>
4.运行Test1进行测试,结果上述。
五.实现数据库增删改查
通过MyBatis给数据库增加、删除、修改、查询数据
5.1.添加数据
1.在Test1文件中写如下代码:
@Test
public void insert() {
try {
//读取配置文件
Reader reader =Resources.getResourceAsReader("mybatis-config.xml");
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();//默认不自动提交事物
//访问调用mapper中的sql
Student student = new Student();
student.setName("李白");
student.setNum(103);
student.setAge(21);
sqlSession.insert("com.ff.mybatisPro.mapper.StudentMapper.saveStudent",student);
//事物提交
sqlSession.commit();
//关闭连接
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
5.2.删除数据
@Test
public void delete() {
try {
SqlSession sqlSession = SqlSessionUtils.setsqlSession();
//访问调用mapper中的sql
int id = 1;//基本类型直接传值
sqlSession.delete("com.ff.mybatisPro.mapper.StudentMapper.deleteStudent",id);
//事物提交
sqlSession.commit();
//关闭连接
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
5.3.修改数据
@Test
public void update() {
try {
SqlSession sqlSession = SqlSessionUtils.setsqlSession();
//访问调用mapper中的sql
Student student = new Student();
student.setId(1);
student.setName("老王");
student.setNum(103);
student.setAge(21);
sqlSession.insert("com.ff.mybatisPro.mapper.StudentMapper.updateStudent",student);
//事物提交
sqlSession.commit();
//关闭连接
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
5.4.查询数据
5.4.1查询一条数据
@Test
public void findStudentById() {
try {
//读取配置文件
Reader reader =Resources.getResourceAsReader("mybatis-config.xml");
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();//默认不自动提交事物
//访问调用mapper中的sql
int id = 2;//基本类型直接传值
sqlSession.selectOne("com.ff.mybatisPro.mapper.StudentMapper.findStudentById", id);
//事物提交
sqlSession.commit();
//关闭连接
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
5.4.2查询全部数据
@Test
public void findStudentList() {
try {
//读取配置文件
Reader reader =Resources.getResourceAsReader("mybatis-config.xml");
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();//默认不自动提交事物
//访问调用mapper中的sql
List<Student> list = sqlSession.selectList("com.ff.mybatisPro.mapper.StudentMapper.findStudentlist");
//事物提交
sqlSession.commit();
//关闭连接
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
上一篇: python爬虫框架Scrapy使用
下一篇: Django 对数据库进行增删改查