myBatis初步认识(一)

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


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.properties

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 + "]";
	}
	
	
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值