mybatis+maven对数据库的简单用法

为什么要用mybatis?

1) 系统的部分或全部数据来自现有数据库, 出于安全性的考虑, 只为开
发团队提供几条
Select SQL(或存储过程) 以获取所需数据, 具体的表
结构不予公开。
2) 开发规范中要求, 所有牵涉到业务逻辑部分的数据库操作, 必须在数
据库层由存储过程实现(对于金融行业而言, 工商银行、 中国银行和交
通银行, 都在开发规范中严格指定)。
3) 系统数据处理量巨大, 性能要求极为苛刻, 这通常意味着我们必须由
经过高度优化的SQL语句(或存储过程) 才能达到系统性能设计指标.

什么是MyBatis?

  1. MyBatis是一个运用于持久层的数据操作框架
  2. MyBatis是从iBatis升级而来
  3. 使用 MyBatis提供的ORM机制, 业务逻辑层实现人员操作的是JAVA对象, 该层面与Hibernate机制中的相同。 对于具体的数据库操作而言,Hibernate会自动生成SQL并执行, 而MyBatis要求开发人员具体编写SQL语句。MyBatis在数据库移植性和SQL开发工作量上进行了让步, 从而提升了系统设计的灵活性, 扩展了其自由空间。  


MyBatis的优势?

  • 支持ORM
  • 支持动态SQL
  • 外部化SQL语句
  • 封装SQL语句  

demo结构图


在maven仓库中引入mybatis架包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mybatis</groupId>
	<artifactId>mybatisDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependencies>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.1</version>
		</dependency>
	</dependencies>

</project>
  我这里是用的oracle数据库,但由于oracle数据库不能引用,具体你可以查下百度。

我这里是直接把架包下下来引用的。

2第二步,创建mybatis的config文件,前提你要有这两个文件。,

大家可以到我度盘去链接: https://pan.baidu.com/s/1o8hmPvW 密码: wqsh




<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "--mybatisconfig--" "mybatis-3-config.dtd" >
<configuration>
	<typeAliases>
<!--你的bean文件,在mapper文件中有引用-->
		<typeAlias type="com.shandian.bean.Emp" alias="emp" />
	</typeAliases>
	<environments default="oracle">

		<environment id="oracle">

			<transactionManager type="JDBC">
			</transactionManager>
			<!--连接池 -->
			<dataSource type="POOLED">
				<!--连接数据库驱动 -->
				<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
				<!-- URL -->
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
				<!--用户名 -->
				<property name="username" value="scott" />
				<property name="password" value="tiger" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
	<!--引用你的empmapper.xml文件  -->
		<mapper resource="com/shandian/mapper/empmapper.xml" />
	</mappers>
</configuration>
 3,创建mapper文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "--mybatismapper--" "mybatis-3-mapper.dtd" >
<mapper namespace="com.shandian.mapper.empmapper">
	<!--resultType的值引用了config中typeAliases> <typeAlias type="com.shandian.bean.Emp" 
		alias="emp" /> </typeAliases>的alias的值 -->
	<select id="queryall" resultType="emp" resultMap="empResult">
		select *from
		emp
	</select>
	<!-- 添加 -->
	<!-- 添加操作并没有结果集,结果类型也没有 -->
	<!--useGeneratedKeys="true"这个可以实现标识列的自动增长,但oracle并没不能自动增长 -->
	<insert id="add" parameterType="emp">
		insert into emp(empno,ename,job)
		values(emp_sql.nextval,#{ename},#{job})
	</insert>
	<!-- 进行删除操作 -->
	<!-- id的意思表示命名空间的唯一标识,与映射接口中的方法一致 -->
	<delete id="delete" parameterType="int">
		delete from emp where
		empno=#{empno}
	</delete>
	<!-- 修改 -->
	<update id="update" parameterType="emp">
		update emp
		<!-- 动态的sql修改 -->
		<set>
			<!--test里面的值是你bean里面的变量名,而不是数据库中的字段名 -->
			<if test="ename!=null">

				ENAME=#{ename},
			</if>
			<if test="job!=null">
				JOB=#{job},
			</if>
			<if test="mgr!=null">
				MGR=#{mgr},
			</if>
			<if test="hiredate!=null">
				HIREDATE=#{hiredate},
			</if>
			<if test="sal!=null">
				SAL=#{sal},
			</if>
			<if test="comm!=null">
				COMM=#{comm},
			</if>
			<if test="Integerno!=null">
				DEPTNO=#{Integerno}
			</if>
		</set>
		where empno=#{empno}
	</update>
	<resultMap type="emp" id="empResult">
		<id column="EMPNO" property="empno" />
		<result column="ENAME" property="ename" />
		<result column="JOB" property="job" />
		<result column="MGR" property="mgr" />
		<result column="HIREDATE" property="hiredate" />
		<result column="SAL" property="sal" />
		<result column="COMM" property="comm" />
		<result column="DEPTNO" property="Integerno" />
	</resultMap>
</mapper>

 4,此mapper所对应的映射接口,(推荐使用这种操作)

package com.shandian.mapper;

import java.util.List;

import com.shandian.bean.Emp;

//注意,这里的名字必须与com.shandian.mapper.empmapper,中empmapper的名字一致且必须在同一包中,不然就不能映射
public interface empmapper {
	// 这个方法名必须与empmaper中进行添加操作的名字一样的.
	// 参数的类型也要一致
	void add(Emp emp);

	// 查询全部
	List<Emp> queryall();

	// 进行删除
	void delete(int id);

	// 修改
	void update(Emp emp);
}
 5,简单的对其进行了增删查改操作

package com.shandian.texst;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

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 com.shandian.bean.Emp;
import com.shandian.mapper.empmapper;

public class EmpTexst {
	// 测试
	public static void main(String[] args) {
		// 查询全部
		// t1();
		// 添加
		// t2();
		// 删除
		// t3();
		// 修改
		t4();
	}

	private static void t4() {
		// TODO Auto-generated method stub
		try {
			Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			SqlSessionFactory factory = builder.build(reader);
			SqlSession session = factory.openSession();
			Emp emp = new Emp();
			emp.setEmpno(7720);
			emp.setEname("java");
			emp.setJob("java");
			empmapper empmapper = session.getMapper(empmapper.class);
			empmapper.update(emp);
			session.commit();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void t3() {
		// TODO Auto-generated method stub
		try {
			Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			SqlSessionFactory factory = builder.build(reader);
			SqlSession session = factory.openSession();
			empmapper empmapper = session.getMapper(empmapper.class);
			empmapper.delete(7717);
			session.commit();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void t2() {
		// TODO Auto-generated method stub
		try {
			// 加载配置
			Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
			// 创建
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			SqlSessionFactory factory = builder.build(reader);
			SqlSession session = factory.openSession();
			Emp emp = new Emp();
			emp.setEname("admin");
			emp.setJob("Android33");
			// 添加1操作
			/*
			 * session.insert("com.shandian.mapper.empmapper.add", emp);
			 * session.commit();
			 */
			// 添加2操作,这种做法是官方推荐的
			empmapper empMapper = session.getMapper(empmapper.class);
			empMapper.add(emp);
			session.commit();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void t1() {
		// TODO Auto-generated method stub
		// 加载配置
		try {
			Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
			// 创建
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			// 解析资源
			SqlSessionFactory factory = builder.build(reader);
			// 打开session
			SqlSession session = factory.openSession();
			// 1传统写法,不推荐
			/*
			 * List<Emp> list =
			 * session.selectList("com.shandian.mapper.empmapper.queryall"); for
			 * (Emp emp : list) { System.out.println(emp); }
			 */
			// 2,用接口映射的形式进行查询,官方推荐
			empmapper empmapper = session.getMapper(empmapper.class);
			List<Emp> list = empmapper.queryall();
			for (Emp emp : list) {
				System.out.println(emp);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


 

demo的下载

链接: https://pan.baidu.com/s/1slvZObr 密码: 6bi4





猜你喜欢

转载自blog.csdn.net/arryluo123/article/details/61616429