MyBasic初步学习代码的实现

MyBasic初步学习代码的实现

Mybasic 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高层映射。Mybatis避免了几乎所有的JSBC代码和手动设置参数以及获取结果集。Mybatiske可以使用简单的XML或注解来设置和映射原生信息,将接口和java的POJOs(plain Old java Objects,普通的java对象)映射成数据库中的记录。

MyBatis最早源自Apache基金会的一个开源项目IBatis,2010年这个项目由APache software foundation 迁移到了google code ,并改名为MyBatis

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久成框架。

MyBatis封装了几乎所有的JDBC代码和参数的手工设置以及结果集的检索;

Mybatiske可以使用简单的XML或注解来设置和映射原生信息,将接口和java的POJOs(plain Old java Objects,普通的java对象)映射成数据库中的记录。

Mybais体系结构主要有以下几个关键部分:

1、加载配置

配置有两种形式,一种是XML配置文件,第二种是java代码的注解。Mybatis将SQL的配置信息加载成为一个个的MappedStatment对象(包括传入参数映射配置,执行的Sql语句、结果映射配置)并将其存储内存中

2、SQl解析

当API接口层接收到调用请求时,会接收传入到SQL的ID和传入对象(可以是Map、javaBean或者基本数据类型),MyBasic会根据SQl的ID找到对应的MapedStatment,然后根据参数对象对MappedStatment进行解析。解析后可以得到最终要执行的SQl语句和参数。

3.、SQl执行

将最终得到的SQl和参数拿到数据库进行执行,得到操作数据库的结果

4、映射

将操作数据库的结果按照映射配置进行转换。可以转换成HashMap、Javabean或者基本数据类型,并将最终结果返回。

以数据库emp表为例进行MyBasic操作

1.在SqlMapConfig.XML文件配置,进行与数据库的连接。

<configuration>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=utf-8"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 引入Mapper文件  -->
<mappers>
<mapper resource="EmpDao.xml"/>
<mapper resource="EmpMapper.xml"/>
</mappers>
</configuration>

2.在EmpDaoxml用MyBasic

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- 命名空间需要与Dao保持一致 -->
<mapper  namespace="com.zhiyou100.Dao.EmpDao">
<!-- 查询所有信息 -->
<select id="findAll" resultType="com.zhiyou100.Model.Emp">
select *from t_emp;
</select>
<!--根据ID查找员工信息-->
<select id="findByIdEmp"   parameterType="Integer" resultType="com.zhiyou100.Model.Emp">
select *from t_emp where empno=#{id}
</select>
<!-- 添加员工信息 -->
<insert id="save" parameterType="com.zhiyou100.Model.Emp" >
<!--insert into t_emp values(null,#{ename},#{mgr},#{comm},#{deptno})  -->
insert into t_emp values(null,#{ename},#{mgr},#{comm},#{deptno})
</insert>
<!-- 更改员工信息 -->
<update id="update" parameterType="com.zhiyou100.Model.Emp"  >
update  t_emp set ename=#{ename},
mgr=#{mgr},
comm=#{comm},
deptno=#{deptno} 
where empno=#{empno}
</update>
<!-- 删除员工信息 -->
<delete id="delete" parameterType="integer">
delete from t_emp where empno=#{empno}
</delete>
<select id="find"  parameterType="int" resultType="map">
select *from t_emp where deptno=#{depton}
</select>
</mapper>

3.emp类

package com.zhiyou100.Model;

public class Emp {
private Integer empno;
private String ename;
private Integer mgr;
private Double comm;
private Integer deptno;
public Integer getEmpno() {
	return empno;
}
public void setEmpno(Integer empno) {
	this.empno = empno;
}
public String getEname() {
	return ename;
}
public void setEname(String ename) {
	this.ename = ename;
}
public Integer getMgr() {
	return mgr;
}
public void setMgr(Integer mgr) {
	this.mgr = mgr;
}
public Double getComm() {
	return comm;
}
public void setComm(Double comm) {
	this.comm = comm;
}
public Integer getDeptno() {
	return deptno;
}
public void setDeptno(Integer deptno) {
	this.deptno = deptno;
}

}

4.创建MyBatisUtil,初步构建数据库工厂会话!!!

package com.zhiyou100.util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import junit.framework.TestCase;

public class MyBatisUtil {
private static SqlSessionFactory sf;
static {
	//加载配置文件  sql会话工厂的建设
 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
 
sf= builder.build(TestCase.class.getClassLoader().
		 getResourceAsStream("SqlMapConfig.xml"));
 System.out.println(sf);
}
/*
 * 创建连接connect/session
 * 
 */
public static SqlSession getSession(){
	return  sf.openSession();
}
public static void main(String[] args ) {
	SqlSession session=MyBatisUtil.getSession();
	System.out.println(session);
	session.close();
}
}

5.EmpDao

package com.zhiyou100.Dao;

import java.util.List;
import java.util.Map;

import javax.websocket.Session;

import org.apache.ibatis.session.SqlSession;

import com.zhiyou100.Model.Emp;
import com.zhiyou100.util.MyBatisUtil;

public class EmpDao {
	// 查找所有信息
	public List<Emp> findAll() {
		SqlSession session = MyBatisUtil.getSession();
		List<Emp> list = session.selectList("com.zhiyou100.Dao.EmpDao.findAll");
		session.close();
		return list;
	}

	// 根据ID查找
	public List<Emp> findByIdEmp(int id) {
		SqlSession session = MyBatisUtil.getSession();
		List<Emp> list = session.selectList("com.zhiyou100.Dao.EmpDao.findByIdEmp");
		session.close();
		return list;
	}

//根据ID查找员工信息
	public Emp findByIdEmp2(int id) {
		SqlSession session = MyBatisUtil.getSession();
		Emp emp = session.selectOne("com.zhiyou100.Dao.EmpDao.findByIdEmp", id);
		session.close();
		return emp;
	}

	// 添加员工信息
	public void save(Emp emp) {
		SqlSession session = MyBatisUtil.getSession();
		try {
			session.insert("com.zhiyou100.Dao.EmpDao.save",emp);
			session.commit();

		} catch (Exception e) {
			e.printStackTrace();
			session.rollback();
		} finally {
			session.close();
		}

	}
	//修改员工信息
	public void update(Emp emp) {
		SqlSession session=MyBatisUtil.getSession();
		try {
			session.update("com.zhiyou100.Dao.EmpDao.update", emp);
			   session.commit();
		} catch (Exception e) {
			 e.printStackTrace();
			 session.rollback();
		}finally {
			session.close();
		}  
	}
	//删除员工信息
	public void delete(int id) {
		SqlSession session = MyBatisUtil.getSession();
		 session.delete("com.zhiyou100.Dao.EmpDao.delete",id);
		 session.commit();
		 session.close();
	}
	//集合套集合,Map<k,v> 通过k值,查找V,将V值放入list集合中
	public List<Map<String, Object>> find(int depton){
		 SqlSession session = MyBatisUtil.getSession();
		 List<Map<String, Object>> list = session.selectList("com.zhiyou100.Dao.EmpDao.find", depton);
		//   session.commit();
		     session.close();
		     return  list;
		  
		 
	}
	
}

6.进行测试

package TestCase;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.zhiyou100.Dao.EmpDao;
import com.zhiyou100.Model.Emp;
import com.zhiyou100.util.EmpMapper;
import com.zhiyou100.util.MyBatisUtil;

public class TestCase {
	@Test
	public void test1() {
		EmpDao dao = new EmpDao();
		List<Emp> list = dao.findAll();
		for (Emp emp : list) {
			System.out.println(emp.getEname());
		}
	}

	@Test
	public void test2() {
		EmpDao dao = new EmpDao();
		List<Emp> list = dao.findByIdEmp(2);
		for (Emp emp : list) {
			System.out.println(emp.getEname());
		}
	}

	// 根据ID查询
	@Test
	public void test3() {
		EmpDao dao = new EmpDao();
		Emp emp2 = dao.findByIdEmp2(2);
		System.out.println(emp2.getEname());

	}

	// 添加
	@Test
	public void test4() {
		EmpDao dao = new EmpDao();
		Emp emp = new Emp();
		emp.setEname("xjcdjewofn");
		emp.setComm(12.0);
		emp.setDeptno(5);
		emp.setMgr(18);
		dao.save(emp);
	}

	// 更改
	@Test
	public void test5() {
		EmpDao dao = new EmpDao();
		Emp emp = dao.findByIdEmp2(5);
		emp.setEname("小小");
		emp.setMgr(15);
		emp.setComm(12.0);
		emp.setDeptno(5);
		dao.update(emp);
	}

	// 删除
	@Test
	public void test6() {
		EmpDao dao = new EmpDao();
		dao.delete(6);
	}

	@Test
	public void test7() {
		EmpDao dao = new EmpDao();
		List<Map<String, Object>> list = dao.find(1);
		for (Map<String, Object> e : list) {
			System.out.println(e.get("ename") + "----" + e.get("mgr"));
		}
	}
	@Test
	public void test8() {
		SqlSession session = MyBatisUtil.getSession();
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		        List<Emp> list = mapper.findAll();
		        for (Emp emp : list) {
		        	System.out.println(emp.getEname());
				}   
	}
}

使用Mapper映射器(重点)

创建EmpMapper.XML文件进行Mapper映射  与EmpDao文件内容一样不再上传。

需要建一个接口EmpMapper接口,这里方法必须要和EmpMapper.XML文件的方法名一致。在TestCase中最后的方法就是对Mapper的测试。Mapper接口中的方法名要和Sql.xml中的SQL的id保持一致

package com.zhiyou100.util;
import java.util.List;
import java.util.Map;
import com.zhiyou100.Model.Emp;
public interface EmpMapper {
  List<Emp>  findAll();
  int findById(int id);
  Emp save(Emp emp);
  void  update(Emp emp);
  void  delect (int id);
   List <Map<String,Object>> find(int deptno);
}

在SqlMap.xml定义<select>操作时,如果查询结果字段名和JAVA POJO属性不一致时,需要使用<resultMap>元素显示指定映射关系。例如

现在还是学习过程,会有不对的方面,欢迎大家指出,不喜勿喷!!!

猜你喜欢

转载自blog.csdn.net/abcdefghwelcome/article/details/82709804