myBatis初步认识(一)

来源:互联网 发布:方知故国有明 编辑:程序博客网 时间:2024/06/03 22:59

写这篇文章之前,送给自己一句话,并不是自己不会,而是以前学的知识不是自己的。


mybatis 官网:  点击打开链接    

src/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><settings><setting name="logImpl" value="LOG4J"/></settings><environments default="oracle"><environment id="oracle"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/><property name="username" value="scott"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/cn/mapper/EmpMapper.xml"/></mappers></configuration>
src/com/cn/mapper/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"><mapper namespace="com.cn.mapper"><resultMap type="com.cn.po.emp" id="emps"><id property="empno" column="empno"/><result property="ename" column="ename"/><result property="job" column="job"/><result property="mgr" column="mgr"/><result property="hirdate" column="hiredate"/><result property="sal" column="sal"/><result property="comm" column="comm"/><result property="deptno" column="deptno"/></resultMap><select id="selectEmpByEmpno" parameterType="int" resultMap="emps">SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM empWHERE empno = #{afdasdfasdfa}</select><select id="selectAllEmp" resultMap = "emps">SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp</select><insert id="inserts" parameterType="com.cn.po.emp">INSERT INTO emp(empno,ename)values(#{empno},#{ename})</insert></mapper>

-------------------------------------------------------------------------------------

/** * 加载MyBatis配置文件 * @throws IOException  */@Testpublic void loadConfXml() throws IOException{InputStream in = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession();String fasdfafds = "7369";emp emp = (emp)session.selectOne("com.cn.mapper.selectEmpByEmpno",fasdfafds);System.out.println(emp.getEmpno()+"--"+emp.getEname());}

上面的代码中,第一行加载文件【为什么这么写,在getResourceAsStream中给出了相应的解释】,第二行生产出主要的工厂SqlSessionFacroty,用于生产SqlSession

上面红色部分,session.selectOne()这个方法有两个参数,第一个参数:要执行的sql,第二个参数是查询哪一条记录

------------->可以发现parameterType需要的是int类型的数据,但是在java中的selectOne()中的参数类型是String【应该myBatis在简单类型是自动映射的,待看底层代码做解释】

-------------->如果将parameterType设置为String,测试后发现也是可以的,而且xml中的名字是无所谓的,以前还一直纠结,但是最好还是写成易懂的,你懂得大笑

/**  * 加载配置文件并查询本地oracle数据库中的emp表的数据 * @throws IOException  */@Testpublic void loadConfAndSelectEmp() throws IOException{InputStream in = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession();List<emp> empList = session.selectList("com.cn.mapper.selectAllEmp");for(int i =0;i<empList.size();i++){emp emp = empList.get(i);System.out.println(emp.toString());//System.out.println(emp.getEmpno()+"---"+emp.getEname());}//System.out.println("emp"+empList.size());}

/** * 问题一:开始mappser.xml 中的parameterType写成了 上面定义的map的id,导致插入的时候出错了 * 问题二:在日志中打出的sql中明明已经出现了对应的insert语句,但是查询数据的时候并没有相应的数据,解决办法,把session  commit() * @throws IOException */@Testpublic void insertIntoEmp() throws IOException{InputStream in = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactroy = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactroy.openSession();emp emp = new emp();emp.setEmpno(223);emp.setEname("小男孩");int count = session.insert("com.cn.mapper.inserts",emp);if(count > 0 ){System.out.println("更新的条数:"+count);}session.commit();session.close();}
--------------------------------------------------------------------------------------


log4j.properties

log4j.rootLogger=DEBUG, stdoutlog4j.logger.com.cn.mapper.EmpMapper = DEBUGlog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout = org.apache.log4j.PatternLayout#log4j.appender.stdout.ConversionPattern = %5p [%t] -%m%n

po/emp.java

package com.cn.po;import java.sql.Date;/** *@emp.java *@ *@myBatis *@author *@2017年11月11日 *@下午3:05:15 *@TODO */public class emp {private Integer empno;private String ename;private String job;private Integer mgr;//上级领导private Date hirdate;private Integer sal;private Integer 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 String getJob() {return job;}public void setJob(String job) {this.job = job;}public Integer getMgr() {return mgr;}public void setMgr(Integer mgr) {this.mgr = mgr;}public Date getHirdate() {return hirdate;}public void setHirdate(Date hirdate) {this.hirdate = hirdate;}public Integer getSal() {return sal;}public void setSal(Integer sal) {this.sal = sal;}public Integer getComm() {return comm;}public void setComm(Integer comm) {this.comm = comm;}public Integer getDeptno() {return deptno;}public void setDeptno(Integer deptno) {this.deptno = deptno;}@Overridepublic String toString() {return "emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hirdate=" + hirdate+ ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]";}}