mybatis的初步核心(一)

1. 作为 一个 半自动的 数据库操作框架, mybts还是很有优势的,

好比 Ak47也是 半自动步枪,比起全自动的 hibernate 在复杂数据结果集有很大优势,

   下面 给具体的 步骤,(纯mybts+xml配置)

2. 首先 导入 jar包 

    连接的 是 mysql 数据库。

3.配置 日志文件

log4j.rootLogger=debug,Console,File  
#\u5B9A\u4E49\u65E5\u5FD7\u8F93\u51FA\u76EE\u7684\u5730\u4E3A\u63A7\u5236\u53F0  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
  
#\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55  
log4j.appender.File.File = logs/ssm.log  
#\u5B9A\u4E49\u6587\u4EF6\u6700\u5927\u5927\u5C0F  
log4j.appender.File.MaxFileSize = 10MB  
# \u8F93\u51FA\u6240\u4EE5\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7  
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n 

4.然后就是 数据库表的配置和创建

 create table sbdept(


 dept_id int primary KEY auto_increment,
 dept_name VARCHAR(20)
)


create table sbemp(
 emp_id int primary KEY auto_increment,
 emp_name VARCHAR(20), 
 dept_id int ,
FOREIGN key(dept_id) REFERENCES sbdept(dept_id)
)


 4-2  java工程中的 配置文件


5. 然后就是 连接数据源的 设置(还有 一些 比如::自增的键和。加载接口的映射文件 。取别名)

<span style="font-size:32px;"><?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>


<!-- 就是代替的 方法,用于 好更改 -->
<properties resource="config.properties">

</properties>
  <!-- 当前系统相关设置 -->
  <settings>
  	<setting name="logImpl" value="Log4j"/>
  	<setting name="useGeneratedKeys" value="true"/>
  	<setting name="cacheEnabled" value="true"/>
  </settings>
  
<!--   这是 取别名 -->
  <typeAliases>
  	<typeAlias type="com.po.emp" alias="sbemp"/>
  	<typeAlias type="com.po.dept" alias="sbdept"/>
  </typeAliases>


<!-- 连接数据库,以后交给 spring -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
           <property name="driver" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${user}"/>
     <property name="password" value="${pwd}"/>
      </dataSource>
    </environment>
  </environments>
  
  
<!--   加载映射文件 -->
  <mappers>
    <mapper resource="com/dao/IdeptDao.xml"/>
<mapper resource="com/dao/IempDao.xml"/>
  </mappers>
</configuration></span>

6.然后就是  对应的 实体类的 编写


   在 有父子关系的 类中 还是要写  对方

8.开始写接口

          

public interface IEmployeeMapper {
	
	public List<TbEmployee> findEmps();
	
	public void saveEmp(TbEmployee emp);
	public void savedept(dept emp);
	public void delteEmp(Integer deptNo);
	public List<dept> findbyInner();
	public void inserdept(dept d);
}</span>
9.然后就是 接口 对应的 具体的 实现xml文件(#{})其id还要与 接口中的方法 一一对应

<?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.xt.dao.IEmployeeMapper">
	
	
	
	<select id="findEmps"  resultType="xtemp">
		select * from emp
	</select>
	
	<insert id="saveEmp" parameterType="xtemp">
		insert into emp values(#{emp_id},#{dept_id},#{emp_name})
		</insert>
	<insert id="savedept" parameterType="com.xt.po.dept">
		insert into dept values(#{dept_id},#{dept_name})
		</insert>
	<delete id="delteEmp" parameterType="java.lang.Integer">
		delete from emp where emp_id = #{emp_id}
	</delete>
</mapper></span>
       9-1遇到 了 查 儿子 的时候把 部门也查出来

  这时候 需要 用到 连接查询(当 数据库中的 表的列名和 类中的名字 不一样,需要 使用的 resultMap)

       

<span style="font-size:32px;"><?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.dao.Iemp">
<!-- 连接查询 的预选 准备 -->
<resultMap id="result_ds" type="sbemp">
        <id column="emp_id" property="empid"/>
        <result column="emp_name" property="empname"/>
   
  <!--从儿子这边查 多对一            数据库对应的外键             java类里面的名字           类型              -->
   <association column="dept_id" property="depts" javaType="sbdept">
        <id column="dept_id" property="deptid"/>
        <result column="dept_name" property="deptname"/>
   </association>
   
</resultMap>
          <!--具体的语句的书写,得到的 类型 就是 两个 类 的 结合 -->
 <select id="findbyinnerAnd" resultMap="result_ds">
    select  a.dept_name,b.* 
    from sbdept a inner join sbemp b
    on a.dept_id=b.dept_id 
 </select>

</mapper></span>

如果是 遇到 查 部门 把所有的 儿子 查出来

 

<span style="font-size:32px;"><?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.dao.Idept">
<!-- 连接查询 的预选 准备 -->
<resultMap id="result_d" type="sbdept">
   <id column="dept_id" property="deptid"/>
   <result column="dept_name" property="deptname"/>
   
  <!--从父亲这边查 一对多            数据库对应的外键                                           java类里面的名字                         -->
   <collection column="dept_id" property="emps" ofType="sbemp">
        <id column="emp_id" property="empid"/>
        <result column="emp_name" property="empname"/>
   </collection>
   
</resultMap>
          <!--具体的语句的书写,得到的 类型 就是 两个 类 的 结合 -->
 <select id="findbyInner" resultMap="result_d">
    select  a.dept_name,b.* 
    from sbdept a inner join sbemp b
    on a.dept_id=b.dept_id 
 </select>



<insert id="inserdept" keyProperty="deptid"//就是这个  不包括orcl数据库
	parameterType="sbdept">
		<!-- <selectKey keyProperty="" order="BEFORE">
			select UUUU.nextval from dual;
		</selectKey> -->
	
		insert 
		into 
		sbdept values(default,#{deptname})

</insert>



</mapper></span>

10. 具体的 使用在 main 函数里面(带有 自增的 插入,并且 把 主键的 数值返回,)

package com.service;


public class demo {

	
	public static void main(String[] args) {
		
		
		try {
			String resource = "Mybatis.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sf = new SqlSessionFactoryBuilder()
					.build(inputStream);
			
			SqlSession s = sf.openSession();
			Idept Iemps=s.getMapper(Idept.class);
	        dept e=new dept();
	        e.setDeptname("工信部3");
			Iemps.inserdept(e);
			System.out.println("<>>"+e.getDeptid());
			s.commit();
	
			
		} catch (Exception e) {
           e.printStackTrace();
		}
		
		
	}
	
	
	
	
	
	
	
	public void c() throws IOException{
		String resource = "Mybatis.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sf = new SqlSessionFactoryBuilder()
				.build(inputStream);
		
		SqlSession s = sf.openSession();
		Iemp Iemps=s.getMapper(Iemp.class);
		
		List<emp> empsl=Iemps.findbyinnerAnd();
		for(emp sfd:empsl){
			System.out.println("<><>><><"+sfd.getEmpname());
			System.out.println(".....>>"+sfd.getDepts().getDeptname());
		}
		
		
		
	}
	
	
	
	
	
	public void a() throws IOException{
		String resource = "Mybatis.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sf = new SqlSessionFactoryBuilder()
				.build(inputStream);
		
		SqlSession s = sf.openSession();
		
		Idept ids=s.getMapper(Idept.class);
		List<dept> dfd=ids.findbyInner();
		for(dept d:dfd){
			System.out.println(">>>"+d.getDeptname());
			
			List<emp> es=d.getEmps();
			for(emp sd:es){
				System.out.println("<><>++"+sd.getEmpname());
			}
		}
		
	}
	
}
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值