Mybatis实现数据的增删查(

什么是 MyBatis?

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

MyBatis架包下载:https://mvnrepository.com/artifact/org.mybatis/mybatis

我这里是用JUnit测试的:右键项目>>>properties>>>java Build Path>>>选中Libraries然后点击Add Library…在选中JUnit下一步换成JUNnit4就OK了

MysBatis实例:

在这里插入图片描述
根据上图创四个类(java包下)
Emp.java

package com.ps;

public class Emp {
	private int empno;
	private String ename;
	private String job;
	
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	@Override
	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + "]";
	}
}

EmpMapping.java

package com.ps;

import java.util.List;

/**
 * 无注解,有xml文件
 * @author 
 *
 * 2018年11月10日上午11:03:52
 */
public interface EmpMapping {
	public List<Emp> queryEmp();
	public List<Emp> queryByEmpno(int empno,String name);
	public List<Emp> queryByEmp(Emp emp);
	
	public void addEmp(Emp emp);
	public void deleteEmp(int empno);	
}

TestMybatis.java

package com.ps;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

/**
 * mybatis的终极思想:1.为了解决sql语句硬编码的问题(约定大于配置) 2.解决面向对象设计问题(面向接口编程)
 * 每个对象对应一个xml文件(映射文件 MAPPING) 设:emp表 emp.xml dept表 dept.xml
 * 
 * @author 伍光政
 *
 *         2018年11月10日上午9:06:27
 */
public class TestMybatis {
	// 获取SqlSession对象
	public static SqlSession getSession() {
		String resource = "/xml/config.xml";
		InputStream resourceAsStream = TestMybatis.class.getResourceAsStream(resource);
		// session工厂 负责产生会话
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
		// 会话就是打开了和数据库的链接
		SqlSession openSession = sqlSessionFactory.openSession();
		return openSession;
	}
	public static void main(String[] args) {
		
	}
	
	// 增加(无注解)
	@Test
	public void test3() {
		Emp emp = new Emp();
		emp.setEname("理事ssss");
		emp.setJob("工作sssss");
		SqlSession session = TestMybatis.getSession();
        try {
        	EmpMapping userOperation = session
                    .getMapper(EmpMapping.class);
            userOperation.addEmp(emp);
            session.commit();
        } finally {
            session.close();
        }
	}
	
	// 删除(无注解)
	@Test
	public void test2() {
		SqlSession session = TestMybatis.getSession();
        try {
        	EmpMapping userOperation = session
                    .getMapper(EmpMapping.class);
            userOperation.deleteEmp(10037);
            session.commit();
        } finally {
            session.close();
        }
	}

	/*
	 * 测试无注解的接口(查询)
	 */
	@Test
	public void test1() {
		// 不建议使用,将来全部要使用接口的模式来写

		/*
		 * List<Emp> selectList = openSession.selectList("com.ps.EmpMapping.queryEmp");
		 * System.out.println(selectList);
		 */
		
		EmpMapping mapper2 = getSession().getMapper(EmpMapping.class);
		List<Emp> EmpMapping = mapper2.queryEmp();
		System.out.println(EmpMapping);// (无参,无注解)
		List<Emp> EmpMapping2 = mapper2.queryByEmpno(55, "理事");
		System.out.println(EmpMapping2);// {多参,无注解)

		Emp emp = new Emp();
		emp.setEmpno(55);
		emp.setEname("理事ssss");
		emp.setJob("工作sssss");
		List<Emp> EmpMapping3 = mapper2.queryByEmp(emp);
		System.out.println(EmpMapping3);// {参数是对象,无注解)
			
	}

	/**
	 * 测试有注解的接口(查询)
	 */
	@Test
	public void test() {
		// 不建议使用,将来全部要使用接口的模式来写

		/*
		 * List<Emp> selectList2 = openSession.selectList("com.ps.EmpMapper.queryEmp");
		 * System.out.println(selectList2);
		 */

		EmpMapper mapper = getSession().getMapper(EmpMapper.class);
		List<Emp> EmpMapper = mapper.queryEmp();
		System.out.println(EmpMapper);// (无参,有注解)
		List<Emp> EmpMapper2 = mapper.queryByEmpno(55,"理事");
		System.out.println(EmpMapper2);// (有参,有注解)
		
		Emp emp = new Emp();
		emp.setEmpno(55);
		emp.setEname("理事");
		List<Emp> EmpMapper3 = mapper.queryByEmp(emp);
		System.out.println(EmpMapper3);// (有参,有注解)

	}

}

EmpMapper.java

package com.ps;

import java.util.List;

import org.apache.ibatis.annotations.Select;

/**
 * 接口映射
 * 有注解  无xml文件
 * @author 
 *
 * 2018年11月10日上午10:51:34
 */
public interface EmpMapper {
	@Select("select * from emp ")
	public List<Emp> queryEmp();
	@Select("select * from emp where empno = #{0} and ename = #{1}")
	public List<Emp> queryByEmpno(int empno,String ename);
	@Select("select * from emp where empno = #{empno} and ename = #{ename}")
	public List<Emp> queryByEmp(Emp emp);
	
	/*
	 * 可以给个别名
	 * @Select("select * from emp where empno = #{e.empno} and ename = #{e.ename}")
	public List<Emp> queryByEmp(@Param("e") Emp emp);*/
	
}

在src的resources的包下:
在这里插入图片描述
jdbc.properties:

jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/m1dn
jdbcUsername=root
jdbcPassword=ps123456

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 resource="jdbc.properties"></properties>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbcDriver}" />
				<property name="url" value="${jdbcUrl}" />
				<property name="username" value="${jdbcUsername}" />
				<property name="password" value="${jdbcPassword}" />
			</dataSource>
		</environment>
	</environments>
	 <mappers>
		<mapper resource="xml/table/empMapper.xml"></mapper>
		<mapper class="com.ps.EmpMapper"/>
	</mappers> 
</configuration>

empMapper.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">
  <!-- 映射文件规范:
  	namespace属性不能少
  	sql语句  >>查询 必须告知单行返回的类型
  	
   -->
<mapper namespace="com.ps.EmpMapping">
  <!-- 
  	请注意:id不能重复
  	如果参数是基本数据类型
	  	可以用#{0}第一个参数#{1}第二个参数的方式
	  	也可以使用#{param1}第一个参数 #{param1}第二个参数
   -->
  <select id="queryEmp" resultType="com.ps.Emp">
  	select * from emp 
  </select>
  <select id="queryByEmpno" resultType="com.ps.Emp">
  	select * from emp where empno = #{0} and ename = #{1}
  </select>
  <select id="queryByEmp" resultType="com.ps.Emp" parameterType="com.ps.Emp">
  	select * from emp where empno = #{empno} and ename = #{ename}
  </select> 
  
  
  <delete id="deleteEmp" parameterType="int">
  	DELETE FROM emp where empno = #{0}
  </delete>
  
  <insert id="addEmp" parameterType="com.ps.Emp" useGeneratedKeys="true" keyProperty="empno">
  	INSERT INTO emp(ename,job) VALUES (#{ename},#{job})
  </insert>
</mapper>

包括一些配置的属性的例子:
https://www.cnblogs.com/luxiaoxun/p/4035040.html

希望能帮到你,也是帮助我自己

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值