您的位置:首页 > 其它

MyBatis教程之一基本使用入门

2017-08-07 12:07 543 查看
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录—-摘自官网说明

MyBatis也是ORM框架的实现,跟Hibernate一样,都是持久层的框架,只是MyBatis涉及到的SQL都需要自己写。

1、创建数据库和表

create database db_m1;
use db_m1;
create table tb_stu(id int auto_increment primary key,name varchar(10),age int);


2、创建数据库表对应的类

//代表的是tb_stu表
public class Student {

private int id;
private String name;
private int age;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}


3、创建Dao层接口和对应的Mapper文件

接口:

public interface StudentDao {

//保存学生对象
void save(Student stu);
//修改
int update(Student stu);
//删除
int delete(Student stu);
//查询
List<Student> query();
}


对应的Mapper文件

<?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">
<!--设置映射配置:接口的配置
内部就是写出接口中抽象方法所需的SQL语句
namespace:对应接口的全称 -->
<mapper namespace="cn.code404.dao.StudentDao">
<!--什么样的SQL就用什么样的标签  -->
<!--insert:实现插入语句的编写
常用属性:
id:就是对应的方法名称
parameterType:形式参数的类型
-->
<!--1、新增数据  -->
<insert id="save" parameterType="Student" keyProperty="id">
<!--获取自增主键的值方式二  -->
<!-- <selectKey keyProperty="id">
select LAST_INSERT_ID()
</selectKey> -->
insert into tb_stu(name,age) values(#{name},#{age})
</insert>
<!--2、修改数据  -->
<update id="update" parameterType="Student">
update tb_stu set name=#{name},age=#{age} where id=#{id}
</update>
<!--3、删除数据  -->
<delete id="delete" parameterType="Student">
delete from tb_stu where id=#{id}
</delete>
<!--4、查询数据 -->
<select id="query" resultType="Student">
select * from tb_stu
</select>
</mapper>


4、MyBatis的配置文件

该配置文件存储在src下,也就是类路径下

<?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="dbconfig.properties"/>
<!--全局设置  -->
<settings>
<setting name="useGeneratedKeys" value="true"/>
</settings>
<!--别名,主要是为mapper文件中的参数的类型写上简称  -->
<typeAliases>
<!--为单个的类写别名  -->
<!-- <typeAlias alias="Student" type="org.qf.domain.Student"/> -->
<!--为整个包设置,这样的话mapper文件使用改包的类就可以直接使用无需包名  -->
<package name="cn.code404.domain"/>
</typeAliases>
<!--数据库的环境设置
default使用哪个配置-->
<environments default="test">
<!--配置信息,id唯一标记  -->
<environment id="test">
<!--配置事物管理
type:类型
取值说明:
1、JDBC:直接使用JDBC的事物模块,设置connection开启事物,根据情况进行回滚或提交
2、MANAGED:这个值标记本身什么都不做,不会提交或回滚事物,但是可以使用容器来管理事物
默认会关闭连接,closeConnection设置为false  -->
<transactionManager type="MANAGED"></transactionManager>
<!--配置数据库的连接数据源
type:类型
取值说明:
1、UNPOOLED:不使用数据库连接池
2、POOLED:使用数据库连接池 -->
<dataSource type="UNPOOLED">
<property name="driver" value="${driverclass}"/>
<property name="url" value="${dburl}"/>
<property name="username" value="${dbuser}"/>
<property name="password" value="${dbpass}"/>
</dataSource>
</environment>
</environments>
<!--映射文件,就是需要MyBatis管理的接口实现类对应的映射文件  -->
<mappers>
<!--基于xml的实现  -->
<mapper resource="cn/code404/dao/StudentDaoMapper.xml"/>
<!-- 基于注解的实现 -->
<!--  <mapper class=""/> -->
<!--标记指定的包  -->
<!-- <package name="cn.code404.dao"/> -->
</mappers>
</configuration>


数据库的配置文件dbconfig.properties

driverclass=com.mysql.jdbc.Driver
dburl=jdbc:mysql://localhost:3306/db_m1?characterEncoding=utf-8
dbuser=lx
dbpass=lx


5、测试

测试类:

//演示MyBatis的使用
public class MyTest1 {

// 基本使用,新增数据
@Test
public void test1() throws IOException {
// 使用步骤
// 1、使用流加载配置文件
InputStream iStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2、创建工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
// 3、创建会话对象
SqlSession session = factory.openSession();
// 4、获取接口的实现类对象
StudentDao dao = session.getMapper(StudentDao.class);
// 5、调用接口中方法实现数据的操作
Student student = new Student();
student.setAge(20);
student.setName("李四");
dao.save(student);
// 6、提交
session.commit();
System.out.println(student.getId());
// 7、关闭
session.close();
iStream.close();

}

// 修改和删除
@Test
public void test2() throws IOException {
// 加载配置
InputStream iStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
// 创建Session
SqlSession session = factory.openSession();
// 获取接口实现类
StudentDao dao = session.getMapper(StudentDao.class);
// 修改
Student stu1 = new Student();
stu1.setAge(16);
stu1.setName("西施");
stu1.setId(5);
System.out.println("修改:" + dao.update(stu1));

// 删除
Student stu2 = new Student();
stu2.setId(2);
System.out.println("删除:" + dao.delete(stu2));
// 提交
session.commit();
// 关闭
session.close();
// 释放
iStream.close();

}

// 查询
@Test
public void test3() throws IOException {
// 加载配置
InputStream iStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
// 创建Session
SqlSession session = factory.openSession();
// 获取接口实现类
StudentDao dao = session.getMapper(StudentDao.class);
System.out.println(dao.getClass().getName());
List<Student> list=dao.query();
for(Student s:list){
System.out.println(s.getId());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis mybatis操作