Mybatis入门基础(四)

Map集合传参

假设我们的实体类,或者数据库中的表,字段或者参数过多,我们可以考虑使用Map

接口类:

//插入一条数据
    void addUser(Map<String,Object> map);
<insert id="addUser" parameterType="map" >
        insert into t_user values(#{user_id},#{user_name},#{user_password},#{user_gender},#{regist_time})
    </insert>
public class Test {
    
    
    @org.junit.Test
    public void test(){
    
    
        //通过封装好的工具类获取SqlSession会话
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //通过接口类型class获取接口对象实例(动态代理)
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        HashMap<String, Object> map = new HashMap<>();
        map.put("user_id",15);
        map.put("user_name","ccc");
        map.put("user_password","88888");
        map.put("user_gender",0);
        map.put("regist_time",new Date());
        //执行接口中的方法
        mapper.addUser(map);
        sqlSession.commit();
        //关闭SqlSession
        sqlSession.close();

    }
}

在这里插入图片描述
执行结果:
在这里插入图片描述

模糊查询

接口类

//模糊查询
    List<User> queryName(String name);

mapper.xml文件SQL语句(通过在配置文件中用"%"连接):

<select id="queryName" parameterType="String" resultType="entity.User">
        select * from t_user where username like "%"#{name}"%"
    </select>

测试类:

public class Test {
    
    
    @org.junit.Test
    public void test(){
    
    
        //通过封装好的工具类获取SqlSession会话
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //通过接口类型class获取接口对象实例(动态代理)
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        //执行接口中的方法
        List<User> users = mapper.queryName("c");
        for (User user:users) {
    
    
            System.out.println(user);
        }
        sqlSession.commit();
        //关闭SqlSession
        sqlSession.close();

    }
}

在这里插入图片描述
方式二:
Mapper.xml文件sql语句(通过在测试类中加%值%)

<select id="queryName" parameterType="String" resultType="entity.User">
        select * from t_user where username like #{name}
    </select>

测试类:

public class Test {
    
    
    @org.junit.Test
    public void test(){
    
    
        //通过封装好的工具类获取SqlSession会话
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //通过接口类型class获取接口对象实例(动态代理)
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        //执行接口中的方法
        List<User> c = mapper.queryName("%c%");
        for (User user:c) {
    
    
            System.out.println(user);
        }
        sqlSession.commit();
        //关闭SqlSession
        sqlSession.close();

    }
}

在这里插入图片描述

数据源优化问题

将数据源中property属性字符串写死的方式改变为外部引用properties文件中的数据-----${键}
db.properties文件:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_zr?serverTimezone=PRC&useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=root

在这里插入图片描述
在这里插入图片描述

类型别名(存在的意义用来减少类完全限定名的冗余)

将某个实体类型别名为指定名字

<typeAliases>
        <typeAlias type="entity.User" alias="user"></typeAlias>
    </typeAliases>

在这里插入图片描述
指定某个包名:默认别名就是这个类的类名,首字母小写(推荐),大写也不报错,如果添加注解则为注解中的别名

<typeAliases>
        <package name="entity"/>
    </typeAliases>

在这里插入图片描述

映射器(Mappers)

MapperRegistry:注册绑定我们的Mapper文件

  • 方式一:resource属性注册
<!--    注册接口相应的mapper文件-->
    <mappers>
        <mapper resource="dao\UserMapper.xml"/>
    </mappers>
  • 方式二:class文件绑定注册
<!--    注册接口相应的mapper文件-->
    <mappers>
        <mapper class="dao.UserMapper"></mapper>
    </mappers>

在这里插入图片描述
注意:

  • 接口和它的Mapper配置文件必须同名

  • 接口和它的Mapper配置文件必须在同一个包下
    否则会报错

  • 方式三:使用扫描包进行注入绑定

<!--    注册接口相应的mapper文件-->
    <mappers>
        <package name="dao"/>
    </mappers>

注意:

  • 接口和它的Mapper配置文件必须同名
  • 接口和它的Mapper配置文件必须在同一个包下
    否则会报错

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/113550811