mybatis相关配置和依赖

项目结构:

pom.xml依赖文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!--项目坐标-->
  <groupId>com.bjpowernode</groupId>
  <artifactId>ch05-result</artifactId>
  <version>1.0</version>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!--单元测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- mysql驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>

    <!--mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>





  </dependencies>


  <build>
    <!--资源插件,处理src/main/java中的properties、xml-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>

  </build>
</project>

分页依赖:

<!--分页依赖-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.10</version>
    </dependency>

resources下的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>

    <!--设置日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--声明别名-->
    <typeAliases>
        <!--第一种语法格式:
            type:Java类型的全限定名称(自定义的类型)
            alias:自定义的别名

            优点:别名可以自定义
            缺点:每个类型必须单独定义
        -->
        <typeAlias type="com.bjpowernode.domain.Student" alias="stu"/>


        <!--第二种语法格式:
            name:包名,mybatis会把这个包中的类名作为别名(不用区分大小写)

            优点:使用方便,一次可以给多给类定义别名
            缺点:不能自定义别名,别名必须是包中的类名,多个包中不能有同名的类,会报错

            最后推荐不使用别名,就使用全限定名称
        -->
        <package name="com.bjpowernode.domain"/>
        
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--配置数据源:创建Connection对象-->
            <dataSource type="POOLED">
                <!--driver:驱动的内容-->
                <property name="driver" value="org.gjt.mm.mysql.Driver"/>
                <!--连接数据库的url-->
                <property name="url"
                          value="jdbc:mysql://localhost:3306/sql?useUnicode-ture&amp;characterEncoding-utf-8"/>
                <!--用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>


    <!--指定其他mapper文件的位置:其目的就是找到文件中的sql语句-->
    <mappers>
        <mapper resource="com\bjpowernode\dao\StudentDao.xml"/>
    </mappers>
</configuration>

mapper文件:写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.bjpowernode.dao.StudentDao">
    <!--使用select、insert、update、delete标签写sql语句-->
    <!--parameterType="java.lang.Integer":表示参数类型,可以写全限定名称,也可以写别名-->
    <select id="selectById" resultType="stu" parameterType="java.lang.Integer">
        select id,name,email,age from student where id=#{studentId}
    </select>


    <!--使用resultMap定义列和属性的关系
        定义resultMap标签:
        id:给resultMap映射取名,唯一值
        type:java类型的全限定名称
    -->
    <resultMap id="customMap" type="com.bjpowernode.vo.CustomObject">
        <!--定义定义列名和属性名的对应关系
            主键用id标签
        -->
        <id column="id" property="cid"/>
        <!--非主键用result标签-->
        <result column="name" property="cname"/>
        <!--列名和属性名相同不用定义,想定义也行-->
    </resultMap>

    <!--resultMap标签指定映射关系
        resultType标签和resultMap标签不能同时使用,二选一
        使用更加灵活,推荐使用
    -->

    <select id="selectById2" resultMap="customMap">
        select id,name,email,age from student where id=#{stuid}
    </select>
    
    <select id="countStudent" resultType="java.lang.Long">
        select count(*) from student
    </select>

    <!--执行sql语句得到一个Map结构数据,mybatis执行sql,将resultSet转换成map
        sql执行结果:key作为列名,value作为值
        dao接口返回是一个map,最大一行结果,多一行便出错
    -->
    <select id="selectMap" resultType="java.util.Map">
        select id,name from student where id=#{stuid}
    </select>

    <!--like的第一种方式-->
    <select id="selectLikeOne" resultType="com.bjpowernode.domain.Student">
        select * from student where name like #{name}
    </select>

    <!--like的第二种方式:格式:name like "%"空格#{}空格"%"-->
    <select id="selectLikeTwo" resultType="com.bjpowernode.domain.Student">
        select * from student where name like "%" #{name} "%"
    </select>

</mapper>

自定义封装的mybatis工具:

package com.bjpowernode.utils;

import jdk.management.resource.ResourceContext;
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 javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;

/*
 * 工具类:创建SqlSession对象
 * */
public class MyBatisUtil {
    private static SqlSessionFactory factory = null;

    static {
        String config = "mybatis.xml";

        //Alt+Enter:快速try+catch
        try {
            InputStream inputStream = Resources.getResourceAsStream(config);
            factory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //创建方法、获取Sqlsession对象
    public static SqlSession getSqlSession() {
        SqlSession session = null;
        if (factory != null) {
            session = factory.openSession();//openSession(true)
        }
        return session;

    }
    //ctrl+alt+l:调整代码格式
}

接口方法:定义所有操作数据库的方法名字

package com.bjpowernode.dao;

import com.bjpowernode.domain.Student;
import com.bjpowernode.vo.CustomObject;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface StudentDao {

    Student selectById(Integer id);

    CustomObject selectById2(@Param("stuid") Integer id);

    long countStudent();

    Map<Object,Object> selectMap(@Param("stuid") Integer id);

    List<Student> selectLikeOne(@Param("name") String name);

    List<Student> selectLikeTwo(@Param("name") String name);
}

需要操作的Java对象创建:需要属性对应的set和get方法,还有toString方法

package com.bjpowernode.domain;

public class Student {
    private  Integer id;
    private  String  name;
    private String email;
    private Integer age;


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "学生实体信息{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

测试单元:

package com.bjpowernode;

import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.utils.MyBatisUtil;
import com.bjpowernode.vo.CustomObject;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;
import java.util.Map;

public class MyTest {
    @Test
    public void testSelectById() {
        SqlSession session = MyBatisUtil.getSqlSession();
        //dao获取代理
        StudentDao dao = session.getMapper(StudentDao.class);
        Student student = dao.selectById(1001);
        System.out.println("查询得到的结果为:" + student);
        session.close();
    }


    @Test
    public void testSelectById2() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);
        CustomObject customObject = dao.selectById2(1003);
        System.out.println("查询得到的结果为:" + customObject);
        session.close();
    }


    @Test
    public void testCountStudent() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);
        long nums = dao.countStudent();
        System.out.println("nums = " + nums);
        session.close();
    }

    @Test
    public void testSelectMap() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);
        Map<Object, Object> map = dao.selectMap(1005);
        System.out.println("map==" + map);
        session.close();
    }


    @Test
    public void testSelectLikeOne() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);
        String name = "%李%";
        List<Student> students = dao.selectLikeOne(name);
        students.forEach(stu -> System.out.println("stu=" + stu));
        session.close();
    }


    @Test
    public void testSelectLikeTwo() {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao dao = session.getMapper(StudentDao.class);
        List<Student> students = dao.selectLikeTwo("李");
        students.forEach(stu -> System.out.println("stu=" + stu));
        session.close();
    }



     @Test
    public void testPageHelper() {
        SqlSession session = MyBatisUtil.getSqlSession();
        //dao获取代理
        StudentDao dao = session.getMapper(StudentDao.class);

        //调用PageHelper方法
        PageHelper.startPage(1,4);

        List<Student> students = dao.selectAllStudents();
        students.forEach(stu-> System.out.println("stu==="+stu));
        session.close();
    }



}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值