Java小白的数据库爱情(六)mybatis typeAliases标签

Java小白的数据库爱情(六)mybatis typeAliases标签

typeAliases标签

使用方法

<typeAliases>
<!--<typeAlias type="com.shsxt.pojo.User" alias="u"/> -->
<!-- <typeAlias type="com.xxxx.pojo.Emp"/>-->
<!--如果 alias="emp"属性省略,默认别名为类名,不区分大小写-->
<package name="com.xxxx.pojo"/>
<!--配置整个包下的所有类型别名默认为类名,不区分大小写-->
</typeAliases>
parameterType入参类型
Map
<select resultType="emp" parameterType="map" id="queryEmpBySalDeptno">
select * from emp where sal>#{sal} and deptno = #{deptno} 
<!--{佔位符名字} 匹配參數集合中key的名字-->
</select>
 //Map: 根据薪资和部门编号查询员工信息
        Map<String,Object> map = new HashMap<>();
        map.put("sal",1500);
        map.put("deptno",30);
        list = session.selectList("com.xxxx.mappers.EmpMapper.queryEmpBySalDeptno",map);
        list.forEach(System.out::println);
数组|List
<!--數組|List : 根据多个就员工编号查询员工信息-->
<select resultType="emp" id="queryEmpByArray">
select * from emp where empno in 
<!--foreach遍历参数list或者数组 collection="array" 参数类型 array | listitem : 指代每次循环从集合或者数组中拿出的数据(变量名)separator: 每个数据之间额分隔符 open: 所有遍历输出的的数据之前以什么内容开始 close : 所有遍历输出的的数最后以什么结束 -->
<foreach close=")" open="(" separator="," item="item" collection="array">#{item} </foreach>
</select>
String[] arr={"hahaha","zhangsan","lisi"}; 
List<User> list=session.selectList("com.shsxt.mapper.EmpMapper.queryEmpByArray", arr); list.forEach(System.out::println);

工具类的封装
public class SessionUtils {
    //回话工厂  单例
    private static SqlSessionFactory factory = null;

    static{
        try {
            factory =  new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取回话
    public static SqlSession getSession(){
        SqlSession session = null;
        if(factory!=null){
            session = factory.openSession(false);  //参数true->自动提交  默认为false手动提交
        }
        return session;
    }
}
//手动事务的提交与回滚
        if(rows>0){
            session.commit();
        }else{
            session.rollback();
        }

resultType结果类型
Map

List

对用 多表联查非常实用,没查出的一条数据,返回一个map集合,都作为位集合中的键值对,方便操作

<!--Map: 返回值的结果的字段名 当做key,值当做value,一条数据对应一个Map集合,多条数请返回List<Map>-->
<select resultType="map" parameterType="_int" id="queryMapById">select empno,ename,sal,comm,deptno from emp where empno = #{id} </select>

<!--List<Map> 根据员工名查询员工信息-->
<select resultType="map" id="queryMapByName">
select empno,ename,sal,comm,deptno from emp where ename in ( 
	<foreach separator="," item="item" collection="list">
		#{item} 
	</foreach>
) 
</select>
 //map
        Map<String,Object> map = session.selectOne("com.xxxx.mappers.EmpMapper3.queryMapById",7369);
        System.out.println(map);

//List<Map>
        List<Map<String,Object>> list2 = session.selectList("com.xxxx.mappers.EmpMapper3.queryMapByName", Arrays.asList("SMITH","feng"));
        list2.forEach(System.out::println);

接口绑定方案

创建接口 抽象方法对应sql语句的输入与输出

  1. xml文件名要与接口名保持一致
  2. namespace属性值 必须与接口的权限定名
  3. id属性必须与抽象方法名保持一致
  4. 返回值类型和参数类型与方法的返回值和参数保持一致

注意:如果抽象方法的参数列表只有一个参数,sql语句的占位符的名字可以任意定义
抽象方法的参数列表有多个参数,sql语句的占位符的名字[arg1, arg0, param1, param2]

//1.获取连接
        SqlSession session = SessionUtils.getSession();
        //2.获取mybatis提供的接口的实现类对象
        //接口多态
        DeptMapper mapper = session.getMapper(DeptMapper.class);
        List<Dept> list = mapper.queryDeptById(10,30);
        list.stream().forEach(System.out::println);

在核心配置文件中扫描接口

  1. 扫描单个接口,可以使用mapper标签的class属性

  2. 扫描多个接口,可以简化配置,使用package标签,表示扫描对应包下的 所有接口

 <!-- mapper 配置扫描接口 -->    
 <mappers>        
 <package name="com.shsxt.mapper"/>    
 </mappers>
 

**使用:**在使用时,通过SqlSession的getMapper() 方法,返回接口代理对象,从而调 用以实现的抽象方法

 SqlSession session = SessionUtils.getSession();
        //2.获取mybatis提供的接口的实现类对象
        //接口多态
        EmpMapper mapper = session.getMapper(EmpMapper.class);

测试接口CRUD 多参数匹配参数名字问题
//@Param(“deptno1”) 注解: 解决sql中占位符的名字与方法参数不同名问题

List<Dept> queryDeptById(@Param("deptno1") int deptno1, @Param("deptno2") int deptno2);
 <select id="queryDeptById" resultType="dept">
        select * from dept where deptno in (#{deptno1},#{deptno2})
    </select>
批量CRUD

DELETE

 <!--批量删除-->
    <delete id="deleteDeptByIdSome">
        delete from dept where deptno in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </delete>

UPDATE

<!--批量修改-->
    <update id="updateDeptByIdSome">
        <foreach collection="list" item="item" open="begin" close=";end;" separator=";">
            update dept set loc = #{item.loc} where deptno = #{item.deptno}
        </foreach>
    </update>

INSERT

 <!--批量插入-->
    <!--
    insert into dept select 1, 'a', 'b' from dual union select 2, 'c', 'd' from dual
    -->
    <insert id="insertDept">
        insert into dept
        <foreach collection="list" item="item" separator="union">
            select #{item.deptno}, #{item.dname}, #{item.loc} from dual
        </foreach>
    </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值