Mybatis框架基础

框架

1.1三层架构

软件开发常用的架构是三层架构,一般包括三层:

  • 持久层:主要完成数据库相关操作,数据库的增删改查,

    因为数据库访问的对象一般称为Data Access Object(简称DAO),所以有人把持久层叫做DAO层。

  • **业务层:**主要根据功能需求完成逻辑的定义实现(最接近于需求)

    因为它主要是为上层提供服务的,所以有人把业务层叫做Service层或Business层。

  • 表现层:主要完成最终软件使用用户的交互,需要有界面的交互

    因此,有人把表现层称之为web层或View层。

三层架构之间调用关系为:表现层调用业务层,业务层调用持久层。 各层之间必然要进行数据交互,我们一般使用java实体对象来传递数据。

1.2框架

1.21框架简介:

重复的代码工作抽取出来,让程序员把精力专注在核心的业务代码实现上。 框架可以理解为一种套路,框架做好以后,接下来就可以按照套路做事情了。

1.2常见的框架:
  • 持久层框架:专注于解决数据持久化的框架,常用的有**Mybatis,**Hibermate(冬眠)等
  • 表现层框架:专注于解决于用户交互的框架.Spring Mvc , struts 2,等
  • 业务层框架(全栈框架):能在各层解决方案的框架,著名的spring

二,Mybatis概述

2.1 ORM概述

ORM(object Relational Mapping)对象关系映射,是一个针对持久层的理论思想

  • O----对象----类

  • R----关系----数据表

  • M----映射----在类和数据表之间建立的一一对应的关系(类名–>表名 属性名–>字段名

    java类和表结构对应关系:一般情况下,表的字段名和Java类的属性名保持一致

三. Mybatis入门案例

3.1创建工程,引入坐标

<?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.itheima</groupId>
    <artifactId>day_43_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--可选坐标lOg4j是日志记录工具,
        myBaits能够借助工具输出运行的日志。
            方便学习和解决出现的问题。-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3.2 创建数据库、数据表、

//创建user表 
CREATE TABLE user( uid INT PRIMARY KEY AUTO_INCREMENT,
                  username VARCHAR(100) NOT NULL UNIQUE,
                  gender VARCHAR(50) ,
                  age VARCHAR(50),
                  address VARCHAR(20),
                  qq varchar(20) ,
                  email varchar(20)
                 );
                 ##字段长度类型根据自己制定,和类保持一致
package domain;

import java.io.Serializable;

public class User  implements Serializable {
    private Integer uid;
    private String username;
    private String gender;
    private Integer age;
    private String address;
    private String qq;
    private String email;

    public User(Integer uid, String username, String gender, Integer age, String address, String qq, String email) {
        this.uid = uid;
        this.username = username;
        this.gender = gender;
        this.age = age;
        this.address = address;
        this.qq = qq;
        this.email = email;
    }

    public Integer getUid() {
        return uid;
    }

    public String getUsername() {
        return username;
    }

    public String getGender() {
        return gender;
    }

    public Integer getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }

    public String getQq() {
        return qq;
    }

    public String getEmail() {
        return email;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", qq='" + qq + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

3.3配置mybatis主配置文件

<?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>
<environments default="ee111">
    <environment id="ee111">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql:///ee111"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>
</configuration>
3.31加入log4j的日志配置文件(可选的)
log4j.rootLogger=trace, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwlWgt70-1571107720659)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571056473743.png)]
3.32编写映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wo1567Um-1571107720660)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571057291648.png)]

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 必须指定,类似指定包名称-->
<mapper namespace="com.itheima">
    <!--id的取值,要求文本文件要求唯一
        parameterType :包存在的java类型,一般可以省略
        sql语句: # 表示占位符
          #{username}:获取parameterType指定类型对象的getUsername方法
    -->
    <insert id="addUser" parameterType="com.itheima.domain.User">
        insert  into current_user
        (username,gender,age,address,qq,email)
        values (
        #{username},#{gender},#{age},#{address},#{qq},#{email}
        )
    </insert>
</mapper>
3.33注册映射文件到mybatis的主配置文件中
  <mappers>
        <mapper resource="mappers/userMapper.xml"></mapper>
    </mappers>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIAwId28-1571107720660)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571057514413.png)]

3.34测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zYMQBRti-1571107720660)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571061983895.png)]

import com.itheima.domain.User;
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.apache.log4j.lf5.util.Resource;
import org.junit.Test;

import java.io.InputStream;

public class MyBatisDemo {
    @Test
    public  void  test1() throws  Exception {
        User user =new User();
        user.setUsername("章安");

        //加载配置文件,Resource,get..Stream
        InputStream in= Resources.getResourceAsStream("mybatis-config.xml");

        //创建sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        //创建SqlSessionFactor对象
        SqlSessionFactory sessionFactory = builder.build(in);

        //创建sqlSession对象
        SqlSession sqlSession = sessionFactory.openSession();

        ///执行操作:insert(String,Object):String:配置文件namespace+id。Object:要保存的数据
        sqlSession.insert("com.itheima.addUser",user);
        
        sqlSession.commit();//事务提交
        
        //释放资源
        sqlSession.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rilymXNT-1571107720661)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571057999336.png)]

传统编写dao实现

import com.sdfzxy.domain.User;

public interface MapperDao {
    void  addUser(User user);
}

编写dao实现
package com.sdfzxy.dao.impl;

import com.sdfzxy.domain.User;
import com.sdfzxy.dao.MapperDao;
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 java.io.IOException;
import java.io.InputStream;

public class MapperDaoIml implements MapperDao {

    public void addUser(User user) {
        try {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");

            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

            SqlSession sqlSession = factory.openSession();

            sqlSession.insert("com.sdfzxy.addUser", user);

            sqlSession.commit();

            sqlSession.close();
        } catch (IOException e) {
            throw new RuntimeException("加载配置文件失败", e);
        }
    }
}

缺点:编写dao实现类,大多数代码都是相同的,仅仅是sql语句不同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SqygrEwJ-1571107720661)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571062183748.png)]

改进:

基于代理生成dao的实现类
package com.sdfzxy.dao;

import com.sdfzxy.domain.User;

public interface MapperDao {
    void  addUser(User user);
}

改进映射文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-te8JgUkO-1571107720662)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571062472383.png)]

<?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>
<environments default="ee111">
    <environment id="ee111">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql:///ee111"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>
    <!--注册映射文件-->
    <mappers>
        <mapper resource="mappers/userMapper.xml"></mapper>
    </mappers>
</configuration>
编写测试类:
import com.sdfzxy.domain.User;
import com.sdfzxy.dao.MapperDao;
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.Test;
import java.io.InputStream;

public class MyBatisDemo {
    @Test
    public  void  test1() throws  Exception {
        User user =new User();
        user.setUsername("章安");

        //加载配置文件,Resource,get..Stream
        InputStream in= Resources.getResourceAsStream("mybatis-config.xml");

        //创建sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        //创建SqlSessionFactor对象
        SqlSessionFactory sessionFactory = builder.build(in);

        //创建sqlSession对象
        SqlSession sqlSession = sessionFactory.openSession();

        //getMapper 只需要指定接口类型,MyBatis就会自动产生该类的字节码文件
        // 并返回对应的对象
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
        mapperDao.addUser(user);

        sqlSession.commit();//事务提交

        //释放资源
        sqlSession.close();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7l3x63r-1571107720662)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571062732731.png)]

以后编写mybatis开发步骤
  • 编写dao接口
  • 编写映射文件
  • 注册映射文件

MyBatis常用的类或接口

  1. org.apache.ibatis.io.Resources:加载配置文件
  2. SqlSessionFactoryBuilder:根据配置文件创建SqlSessionFactory对象的。
  3. SqlSessionFactory:他是一个重量级的对象(创建该对象比较消耗资源)。它是单个数据库映射关系经过编译后的内存镜像,SqlSessionFactory可以通过SqlSessionFactoryBuild对象类获取****,而SqlSessionFactoryBuild则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例,每一个mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心,sqlSessionFactory也是线程安全的**,SqlSessionFactory一旦被创建,在应用执行期间都存在,不宜重复创建多次,推荐使用单例模式,SqlSessionFactory是创建SqlSession的工厂。
  4. SqlSession:SqlSession也是mybatis中的重要对象,是持久化操作的独享。类似于jdbc中的Connection,它是应用程序与持久层之间执行互操作的一个单线程对象,也是Mybatis执行持久化操作的关键对象,SqlSession对象完全包含以数据库为背景的所执行SQL操作方法。底层封装了JDBC连接,可以用SqlSession的实例对来执行被映射的SQL语句,每个线程有他自己的SqlSession实例,SqlSession的实例不能被共享,SqlSession也不是线程安全的,绝对不能将SqlSession实例的引用放在任何类型的管理范围中,使用完SqlSession之后关闭Session很重要,放在finally块来关闭它。**

工具类和测试基类

MyBatis工具类
package com.sdfzxy.util;

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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUtil {
    private  static SqlSessionFactory factory;

    static {

        try {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            factory=new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            throw  new  RuntimeException("请检查您的配置文件",e);
        }
    }
    public  static SqlSession openSession(){
        return  factory.openSession();
    }
}
Junit的测试基类
package com.sdfzxy.util;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;

public class BaseTester {
    protected SqlSession sqlSession;
    
    @Before//在每一个测试方法前先进行执行操作
    public  void  openSession(){
        sqlSession=MyBatisUtil.openSession();
    }
    @After//在每一个测试方法执行后执行操作
    public  void  closeSession(){
        sqlSession.close();
    }
    
}
测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

public class MapperDaoTest extends BaseTester {
    @Test 
    public  void  testAddUser(){
        User user =new User();
        user.setUsername("李四");
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
        mapperDao.addUser(user);
        sqlSession.commit();
    }
}

mybatis实现修改和删除及查询功能

修改

1.编写Mapperdao接口和方法

package com.sdfzxy.dao;

import com.sdfzxy.domain.User;

public interface MapperDao {
    void  updateUser(User user);

}

2.修改映射文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7XRn23o-1571107720663)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571099640605.png)]

3.编写测试类进行测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

public class MapperDaoTest extends BaseTester {

    @Test
    public  void  testUpdateUser(){
        User user =new User();
        user.setUid(1);
        user.setUsername("admmin");
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
        mapperDao.updateUser(user);
        sqlSession.commit();
    }
}

删除

1.编写Mapperdao接口和方法

package com.sdfzxy.dao;

import com.sdfzxy.domain.User;

public interface MapperDao {
    void  delUser(Integer uid);

}

别名:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KiliSgfz-1571107720663)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571100546898.png)]

2.修改映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJpsggi3-1571107720664)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571100868544.png)]

3.测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

public class MapperDaoTest extends BaseTester {
  
    @Test
    public  void  testDelUser(){
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
        mapperDao.delUser(16);
        sqlSession.commit()
    }
}

简单查询

查询所有的记录
情况一:结果集的字段名(不是表的字段名)和实体类属性名一致

1.编写Mapperdao接口和方法

package com.sdfzxy.dao;

import com.sdfzxy.domain.User;

import java.util.List;

public interface MapperDao {

    List<User>findAllUsers1();

}

2.修改映射文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvhgOXN4-1571107720664)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571101811638.png)]

3:测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

import java.util.List;

public class MapperDaoTest extends BaseTester {

    @Test
    public  void testFindAllUser1(){
        MapperDao mapperDao =sqlSession.getMapper(MapperDao.class);
        
        List<User> allUsers1 = mapperDao.findAllUsers1();
        
        System.out.println(allUsers1);
    }
}
情况二:结果集的字段名(不是表的字段名)和实体类属性名不一致

1.编写Mapperdao接口和方法

package com.sdfzxy.dao;

import com.sdfzxy.domain.User;

import java.util.List;

public interface MapperDao {

    List<User>findAllUsers2();

}

2.修改映射文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWbXmjVR-1571107720665)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571102716290.png)]

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

import java.util.List;

public class MapperDaoTest extends BaseTester {
  
    @Test
    public  void testFindAllUser2(){
        MapperDao mapperDao =sqlSession.getMapper(MapperDao.class);
        List<User> allUsers2 = mapperDao.findAllUsers2();
        System.out.println(allUsers2);
    }


条件查询

只有一个简单类型的参数

1.编写Mapperdao接口和方法

    User findUserByUid(Integer uid);

2.修改映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3jUpRsP-1571107720665)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571103200995.png)]

3.测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.After;
import org.junit.Test;

import java.util.List;

public class MapperDaoTest extends BaseTester {
  
    @Test
    public  void  testFindeOne(){

        MapperDao mapperDao =sqlSession.getMapper(MapperDao.class);
        User userByUid = mapperDao.findUserByUid(103);
        System.out.println(userByUid);
    }

}

多个简单类型的参数

1.编写Mapperdao接口和方法

User findUserByUidUsername(Integer uid,String username);

2.修改映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nlMoX3H-1571107720666)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571103590553.png)]

测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.After;
import org.junit.Test;

import java.util.List;

public class MapperDaoTest extends BaseTester {

    @Test
    public void  testFindeUidUsername(){
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
        System.out.println(mapperDao.findUserByUidUsername(1, "admmin"));
    }
}

使用VO对象进行封装多个参数
  1. VO:variable object,变量对象,存放的是函数或全局代码执行过程中需要用到的局部变量(类似POJO)

1.把查询的条件封装到VO对象

创建UserVo类

package com.sdfzxy.domain;

import java.io.Serializable;

public class UserVo implements Serializable {
    private  Integer uid;
    private  String username;

    public UserVo() {
    }

    public UserVo(Integer uid, String username) {
        this.uid = uid;
        this.username = username;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

2。编写MapperDao

    User findUserByUidUsername1(UserVo userVo);

2.修改映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drcThKA5-1571107720666)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571104840489.png)]

3。测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.domain.UserVo;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

import java.util.List;

public class MapperDaoTest extends BaseTester {

    @Test
    public void  testFindeUidUsername1(){
        UserVo userVo=new UserVo();
        userVo.setUid(1);
        userVo.setUsername("admmin");
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class)
            
        User userByUidUsername1 = mapperDao.findUserByUidUsername1(userVo);
        
        System.out.println(userByUidUsername1);
    }
}

模糊查询

方式1:

1。编写MapperDao

   List< User> findUserByUidUsername2(String username);

2。修改映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFNj0hSj-1571107720666)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571105529269.png)]

3.测试

import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.domain.UserVo;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;

import java.util.List;

public class MapperDaoTest extends BaseTester {

    @Test
    public void  testFindeUidUsername2(){
        MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
        
        List<User> userByUidUsername2 = mapperDao.findUserByUidUsername2("%user%");
        
        System.out.println(userByUidUsername2);
    }
}

方式2:

1.编写mapper接口

   List< User> findUserByUidUsername3(String username);
2修改映射文件:(推荐使用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C04X8b0S-1571107720667)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571106132691.png)]

3.测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmFlYVK1-1571107720667)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571106283171.png)]

面试题:

#{username}和${username}的区别

#表示占位符

$表示字符串拼接,存在sql注入问题,不建议使用

关于映射文件总结

标签属性说明
mappernamespace唯一区别不用的配置文件,在使用代理方式的dao编码时,取值要和Dao接口名称保持一致
insert delete update selectid文件中要求**唯一,取值和dao方法名一致****
insert delete update selectparameterType指定参数类型:Integer存在别名:int Integer,一般可以省略该属性
insert delete update selectresultType指定实体的类型.在结果集的字段名和实体类属性名一致时使用,自动映射
insert delete update selectresultMap配合resultMap标签使用,指定手动映射的id取值

面试题:

#{username}和${username}的区别

#表示占位符

$表示字符串拼接,存在sql注入问题,不建议使用

关于映射文件总结

标签属性说明
mappernamespace唯一区别不用的配置文件,在使用代理方式的dao编码时,取值要和Dao接口名称保持一致
insert delete update selectid文件中要求**唯一,取值和dao方法名一致****
insert delete update selectparameterType指定参数类型:Integer存在别名:int Integer,一般可以省略该属性
insert delete update selectresultType指定实体的类型.在结果集的字段名和实体类属性名一致时使用,自动映射
insert delete update selectresultMap配合resultMap标签使用,指定手动映射的id取值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值