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&characterEncoding=utf-8"/> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="username" value="root"/> <property name="password" value=""/> </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>元素显示指定映射关系。例如:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/26652.html