mybatis课程总结!

        通过长时间的mybatis学习,我认为MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架,它使代码量大大减少!这段时间我也对mybatis课程的增删改查熟练掌握,一对一和一对多查询掌握的不太熟练,但基本知识已掌握!

       下面就是我对MyBatis增删改查以及一对一和一对多查询的基本知识!

一.编写MySQL数据库!

use mydb;

drop table if exists classInfo;
create table classInfo(
  cid int primary key auto_increment,
	cname varchar(20),
	cinfo varchar(20)
);
insert into classInfo(cname,cinfo) values('移动2103','学风良好');
insert into classInfo(cname,cinfo) values('移动2104','班风良好');
insert into classInfo(cname,cinfo) values('移动2105','学风良好');
SELECT * from classInfo;

drop table if exists student;
create table student(
  sid int primary key auto_increment,
	sname varchar(20),
	sex varchar(2),
	phone varchar(11),
	address varchar(50),
	cid int
);

insert into student(sname,sex,phone,address,cid) values('小明','男','133','南阳',1);
insert into student(sname,sex,phone,address,cid) values('小美','女','123','郑州',2);
insert into student(sname,sex,phone,address,cid) values('小张','男','232','信阳',3);
SELECT * from student;
SELECT * from student INNER JOIN classInfo on classInfo.cid=student.cid;

二.打开idea创建一个项目并Module一个kaoshi1,创建lib文件s配置环境.

 三.创建Class的实体类。

package com.wang.bean;

public class Class {
    public Integer cid;
    public String cname;
    public String cinfo;

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getCinfo() {
        return cinfo;
    }

    public void setCinfo(String cinfo) {
        this.cinfo = cinfo;
    }

    @Override
    public String toString() {
        return "Class{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                ", cinfo='" + cinfo + '\'' +
                '}';
    }
}

导入loj4j.properties文件

 在创建jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.user=root
jdbc.password=root
mapper.dao=com.wang.dao.ClassDao
a.dao=com.wang.dao.StudentDao

 四.创建mybatis.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>
    <properties resource="jdbc.properties" />
    <settings>
        <setting name="logImpl" value="log4j"/>
    </settings>
    <typeAliases>
        <package name="com.wang.bean"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="${mapper.dao}"></mapper>
        <mapper class="${a.dao}"></mapper>
    </mappers>
</configuration>

五.在dao包创建Classdao

package com.wang.dao;

import com.wang.bean.Class;

import java.util.List;

public interface ClassDao {
    //全查
    List<Class> selectAll();
    //通过ID单查
    Class selectbyId(int cid);
    //添加数据
    int add(Class classInfo);
    //删除
    int delete(int cid);
}

在创建ClassDao.xml,并编写SQL语句。

<?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.wang.dao.ClassDao">
    <select id="selectAll" parameterType="com.wang.bean.Class" resultType="com.wang.bean.Class">
        select * from classInfo;
    </select>
    <select id="selectbyId" parameterType="int" resultType="com.wang.bean.Class">
        select * from classInfo where cid=#{cid};
    </select>
    <insert id="add" parameterType="com.wang.bean.Class">
        insert into classInfo(cname,cinfo)values (#{cname},#{cinfo});
    </insert>
    <delete id="delete" parameterType="int">
        delete from classInfo where cid=#{cid};
    </delete>
</mapper>

六.在test中创建ClassTest,在里面进行测试并运行

package com.wang.test;

import com.wang.bean.Class;
import com.wang.bean.Student;
import com.wang.dao.ClassDao;
import com.wang.dao.StudentDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class Classtest {
    InputStream stream=null;
    SqlSessionFactoryBuilder builder=null;
    SqlSessionFactory factory=null;
    SqlSession session=null;
    ClassDao classDao=null;
    StudentDao studentDao=null;
    @Before
    public void init() throws IOException{
        stream= Resources.getResourceAsStream("mybatis.xml");
        builder=new SqlSessionFactoryBuilder();
        factory=builder.build(stream);
        session=factory.openSession();
        classDao=session.getMapper(ClassDao.class);
        studentDao=session.getMapper(StudentDao.class);
    }
    //班级表全查
    @Test
    public void testSelectAll() throws IOException{
        List<Class> classList = classDao.selectAll();
        for (Class n : classList) {
            System.out.println(n);
        }
    }
    //班级表单查
    @Test
    public void testSelectByUid(){
        Class a=classDao.selectbyId(1);
        System.out.println(a);
    }
    //班级表添加
    @Test
    public void testAdd() throws IOException {
        Class aclass=new Class();
        aclass.setCname("xx");
        aclass.setCinfo("xx!");
        int n= classDao.add(aclass);
        if (n>0){
            System.out.println("新增成功!");
        }
    }
    //班级表删除
    @Test
    public void deletetest(){
        int n = classDao.delete(5);
        if (n>0){
            System.out.println("删除成功");
        }
    }
    //学生信息模糊查询
    @Test
    public void testSeach(){
        Student seach=new Student();
        seach.setSname("明");
        seach.setPhone("1");
        seach.setAddress("南");
        List<Student> sList = studentDao.seach(seach);
        for (Student user : sList){
            System.out.println(user);
        }
    }
    @After
    public void distory() throws IOException{
        session.commit();
        session.close();
        session.close();
    }
}

运行结果:

 全查

 通过ID单查

 添加

 删除

 一对一以及一对多

 创建EmpDao.xml

<mapper namespace="com.chen.dao.EmpDao">
<!-- 定义手动映射关系:数据库中字段 和 类的属性 的映射 -->
<resultMap id="empMap" type="com.chen.bean.Emp">
<id property="eid" column="eid"/>
<result property="ename" column="ename"/>
<result property="job" column="job"/>
<result property="sal" column="sal"/>
<result property="phone" column="phone"/>
<result property="address" column="address"/>
<!-- 一对一的映射配置association: 自动关联查询:根据外键did执行dept表的关联查询,把查询出来部门信息封装到emp的dept属性 -->
<association column="did" select="com.chen.dao.DeptDao.selectByDid" property="dept"> </association>
</resultMap>
<select id="selectBuEid" parameterType="int" resultMap="empMap"> select * from emp where eid=#{eid} </select>
<select id="selectAll" resultMap="empMap"> select * from emp </select>
</mapper>

在test包中创建EmpTest, 运行并进行测试

package com.chen.test;

import com.chen.bean.Emp;
import com.chen.dao.EmpDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class EmpTest {
    InputStream stream=null;
    SqlSessionFactoryBuilder builder=null;
    SqlSessionFactory factory=null;
    SqlSession sqlSession=null;
    EmpDao empDao=null;

    @Before
    public void init() throws IOException {
        stream= Resources.getResourceAsStream("mybatis.xml");
        builder=new SqlSessionFactoryBuilder();
        factory=builder.build(stream);
        sqlSession=factory.openSession();
        empDao=sqlSession.getMapper(EmpDao.class);
    }

    @Test
    public void testSelectByeid(){
        Emp emp = empDao.selectBuEid(2);
        Emp emp1 = empDao.selectBuEid(2);
        System.out.println(emp);
        System.out.println(emp1);
    }

    @Test
    public void testSelectAll(){
        List<Emp> empList = empDao.selectAll();
        for (Emp emp : empList) {
            System.out.println(emp);
        }
    }

    @After
    public void distroy() throws IOException {
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }
}

一对多

在dao包中创建一个DeptDao.bak写

<?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.chen.dao.DeptDao">
    <resultMap id="deptMap" type="com.chen.bean.Dept">
        <id property="did" column="did" />
        <result property="dname" column="dname"/>
        <result property="dinfo" column="dinfo"/>
        <!--配置一对多关系:手动映射配置-->
        <collection property="emps" ofType="com.chen.bean.Emp">
            <id property="eid" column="eid" />
            <result property="ename" column="ename" />
            <result property="job" column="job" />
            <result property="sal" column="sal" />
            <result property="phone" column="phone" />
            <result property="address" column="address" />
        </collection>
    </resultMap>

    <select id="selectByDid" parameterType="int" resultMap="deptMap">
        select * from dept inner join emp on dept.did=emp.did where dept.did=#{did};
    </select>
</mapper>

创建一个DeptDao接口编写

package com.chen.dao;

import com.chen.bean.Dept;

public interface DeptDao {
    Dept selectByDid(int did);
}

在创建一个DeptDao的xml文件

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<mapper namespace="com.chen.dao.DeptDao">
<resultMap id="deptMap" type="com.chen.bean.Dept">
<id property="did" column="did"/>
<result property="dname" column="dname"/>
<result property="dinfo" column="dinfo"/>
<!-- 配置一对多关系:自动根据did去关联查询emp表中该did的信息 -->
<collection column="did" select="com.chen.dao.EmpDao.selectByDid" property="emps"> </collection>
</resultMap>
<select id="selectByDid" parameterType="int" resultMap="deptMap"> select * from dept where did=#{did}; </select>
</mapper>

接着在test中进行代码测试

package com.chen.test;

import com.chen.bean.Dept;
import com.chen.dao.DeptDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class DeptTest {
    InputStream stream=null;
    SqlSessionFactoryBuilder builder=null;
    SqlSessionFactory factory=null;
    SqlSession sqlSession=null;
    DeptDao deptDao=null;

    @Before
    public void init() throws IOException {
        stream= Resources.getResourceAsStream("mybatis.xml");
        builder=new SqlSessionFactoryBuilder();
        factory=builder.build(stream);
        sqlSession=factory.openSession();
        deptDao=sqlSession.getMapper(DeptDao.class);
    }

    @Test
    public void testSelectByDid(){
        Dept dept = deptDao.selectByDid(101);
        System.out.println(dept);
    }



    @After
    public void distroy() throws IOException {
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }
}

运行即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值