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>