mybatis的初步核心(一)

来源:互联网 发布:歌曲剪辑拼接软件 编辑:程序博客网 时间:2024/05/11 02:29

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>

0 0
原创粉丝点击