第一章 Mybatis构建ORM应用

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/Mythology_px/article/details/82861314

        MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML或注解用于配置和原始映射,将接口和 Java POJO Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录

 

项目实例

       1.  创建项目,引入Mybatis所需jar(数据库包,mybatis)

            

       2.  创建数据库数据(MySQL)

## 创建数据库
CREATE DATABASE	mybatis;

## 创建用户
CREATE USER 'mjsw'@'localhost'
IDENTIFIED BY 'mjsw';
COMMIT;
## 授权
GRANT ALL ON mybatis.* TO 'mjsw'@'localhost';

## 使用指定数据库
USE mybatis

## 创建表
CREATE TABLE stu(
	stuno INT PRIMARY KEY AUTO_INCREMENT,
	sname VARCHAR(20) NOT NULL,
	sex VARCHAR(8),
	bir DATE NOT NULL,
	phone VARCHAR(11)
);
## 插入数据
INSERT INTO stu VALUES(NULL,'Micro','man','1997-02-12','17742328212');
INSERT INTO stu VALUES(NULL,'Myth','man','1997-03-20','18629364523');
INSERT INTO stu VALUES(NULL,'Gider','woman','1996-09-15','15629345522');
INSERT INTO stu VALUES(NULL,'Rose','woman','1996-04-11','15675342569');

## 查询数据库
SELECT * FROM stu;

       3.  数据库驱动配置文件: MySQL.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/mybatis
jdbc.user=mjsw
jdbc.password=mjsw

       4.  添加mybatis配置文件: mybatis-config.xml

<?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文件(JDBC连接的信息) -->
	<properties resource="MySQL.properties"/>
	
	<!-- 为实体类定义别名:简化sql映射的xml引用 -->
	<typeAliases>
		<typeAlias type="com.model.Student" alias="Student"></typeAlias>
	</typeAliases>
	
	<!-- 配置mybatis运行环境:默认开发者模式 -->
	<environments default="development">
	
		<!-- 环境变量:开发者模式 -->
		<environment id="development">
			 <!-- 事务管理器:type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
			<transactionManager type="JDBC"/>
			
			<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
			<!-- POOLED 表示支持JDBC数据源连接池 -->
			<!-- UNPOOLED 表示不支持数据源连接池 -->
			<!-- JNDI 表示支持外部数据源连接池 -->
			<dataSource type="POOLED">
				<!-- 读取引入的外部配置文件中的数据:name属性值是固定的 -->
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.user}" />
				<property name="password" value="${jdbc.password}" />		
			</dataSource>		
		</environment>
	</environments>
	
	<!-- 映射器:注册,映射接口配置文件 -->
	<mappers>
		<!-- 指定具体路径的映射接口配置文件资源 -->
		<mapper resource="com/mapper/StudentMapper.xml"></mapper>
	</mappers>
	
</configuration>

       5.  创建model实体对象: Student

package com.model;

import java.sql.Date;

/*
 * 	数据库对象的实体对象
 */
public class Student {
	private int stuno;
	private String sname;
	private String sex;
	private Date bir;
	private String phone;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(int stuno, String sname, String sex, Date bir, String phone) {
		super();
		this.stuno = stuno;
		this.sname = sname;
		this.sex = sex;
		this.bir = bir;
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Student [stuno=" + stuno + ", sname=" + sname + ", sex=" + sex
				+ ", bir=" + bir + ", phone=" + phone + "]";
	}
	public int getStuno() {
		return stuno;
	}
	public void setStuno(int stuno) {
		this.stuno = stuno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBir() {
		return bir;
	}
	public void setBir(Date bir) {
		this.bir = bir;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
}

       6.  创建方法接口和定义操作表的sql映射配置文件并注册

         接口: IstudentMapper

package com.mapper;

import java.util.List;

import com.model.Student;

/*
 *	数据库方法接口----------->sql操作的映射文件
 */
public interface IStudentMapper {
	// 查询所有学生信息
	public List<Student> findAll();
	// 增加信息
	public int add(Student stu);	
	// 删除信息
	public int delete(int id);	
	// 修改信息
	public int update(Student stu);
}

          映射配置文件: StudentMapper.xml

<?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">
  

<mapper namespace="com.mapper.IStudentMapper">
<!-- 接口对应的sql映射文件 :配置完接口映射文件之后需在mybatis配置文件进行注册-->

	<!-- 执行查询,将结果集数据存入集合中,需自定义返回结果集 -->
	<resultMap type="Student" id="StudentList">
		<id property="stuno" column="stuno" />
		<result property="sname" column="sname" />
		<result property="sex" column="sex" />
		<result property="bir" column="bir" />
		<result property="phone" column="phone" />
	</resultMap>
	
	<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用 -->
	<!-- parameterType属性指明查询时使用的参数类型 -->
	<!-- resultType属性指明查询返回的结果值类型 -->
	<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值  -->

	<!-- 增,删,改返回是影响的行数,不需要指定返回类型resultType-->
	<!-- 增加信息 -->
	<insert id="add" parameterType="Student">
		insert into stu values(null,#{sname},#{sex},#{bir},#{phone})
	</insert>
	<!-- 删除信息 -->
	<delete id="delete" parameterType="Student">
		delete from stu where stuno=#{stuno}
	</delete>
	<!-- 修改信息 -->
	<update id="update" parameterType="Student">
		update stu set sname=#{sname},sex=#{sex},bir=#{bir},phone=#{phone} where stuno=#{stuno}
	</update>
	<!-- 查询所有信息 -->
	<select id="findAll" resultMap="StudentList">
		select * from stu
	</select>

</mapper>

       7.  工具类: DBTools

package com.util;

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;

/*
 * mybatis连接数据库工具类
 */
public class DBTools {
	
	private SqlSession sqlsession =  null ;
	
	// 连接数据库,并返回接口
	public Object getInterfaceSqlSession(Class<?> cls) throws IOException{
		
		// ① 引入配置文件,创建SqlSessionFactoryBuilder
		String resource = "mybatis-config.xml";
		InputStream is = Resources.getResourceAsStream(resource);
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();	
		// ② builder建造SqlSessionFactory
		SqlSessionFactory factory = builder.build(is);	
		// ③ factory得到SqlSession
		this.sqlsession = factory.openSession();
		// ④ 获取接口对象,
		Object obj = sqlsession.getMapper(cls);
		return obj;	
	}
	
	// 提交事务
	public void commit(){
		if(sqlsession!=null){
			sqlsession.commit();
		}
	}
	// 关闭
	public void close(){
		if(sqlsession!=null){
			sqlsession.close();
		}
	}
}

       8.  测试

package com.test;

import java.io.IOException;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.mapper.IStudentMapper;
import com.model.Student;
import com.util.DBTools;
/*
 * 	测试
 * */
public class Test {
	public static void main(String[] args) throws IOException {
		// 创建数据库对象
		DBTools db = new DBTools();
		// 获取接口
		IStudentMapper ism =(IStudentMapper)db.getInterfaceSqlSession(IStudentMapper.class);
		
		// 查询
		List<Student> list = ism.findAll();
		for (Student stu : list) {
			System.out.println(stu);
		}
		// 增加
		try {
			ism.add(new Student(0,"Lisa", "woman", 
					new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1996-12-30").getTime())
			, "17792364586"));
		} catch (ParseException e) {
			System.err.println("时间格式转换失败");
		}
		System.out.println("数据库数据增加成功");
		
		//修改	
		try {
			ism.update(new Student(4,"Rose", "woman", 
					new Date(new SimpleDateFormat("yyyy-MM-dd").parse("1996-04-11").getTime())
			, "12345678923"));
		} catch (ParseException e) {
			System.err.println("时间格式转换失败");
		}
		System.out.println("数据库数据修改成功");
		
		// 删除
		ism.delete(1);
		System.out.println("数据库数据删除成功");
		// 提交事务和关闭
		db.commit();
		db.close();		
	}
}

猜你喜欢

转载自blog.csdn.net/Mythology_px/article/details/82861314