写这篇文章之前,送给自己一句话,并不是自己不会,而是以前学的知识不是自己的。
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 emp
WHERE 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
*/
@Test
public 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
*/
@Test
public 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
*/
@Test
public 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.rootLogger=DEBUG, stdout
log4j.logger.com.cn.mapper.EmpMapper = DEBUG
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.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;
}
@Override
public String toString() {
return "emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hirdate=" + hirdate
+ ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]";
}
}