MyBatis第二天

五 parameterType 属性
  1. 在XXXMapper.xml中<select><delete>等标签的 parameterType 可以控制参数类型
  2. SqlSession 的 selectList()和 selectOne()的第二个参数和 selectMap()的第三个参数都表示方法的参数.
      2.1 示例,

People p = session.selectOne("a.b.selById",1);
System.out.println(p)

     2.2 在 Mapper.xml 中可以通过#{}获取参数
         2.2.1parameterType 控制参数类型
         2.2.2#{}获取参数内容
            2.2.2.1 使用索引,从 0 开始 #{0}表示第一个参数
            2.2.2.2 也可以使用#{param1}第一个参数
            2.2.2.3 如果只有一个参数(基本数据类型或 String),mybatis对#{}里面内容没有要求只要写内容即可.
            2.2.2.4 如果参数是对象#{属性名}
            2.2.2.5 如果参数是 map 写成#{key}

<select id="selById" resultType="com.bjsxt.pojo.People" parameterType="int"> 
select * from people where id=#{0}
</select>

3. #{} 和 ${} 的区别
     3.1#{} 获取参数的内容支持 索引获取,param1获取指定位置参数,并且 SQL 使用?占位符
     3.2${} 字符串拼接不使用?,默认找${内容}内容的 get/set 方法,如果写数字,就是一个数字
4. 如果在 xml 文件中出现 “<”,“>”,双引号 等特殊字符时可以使用XML 文件转义标签(XML 自身的)
    4.1<![CDATA[ 内容 ]]>
5. mybatis 中实现 mysql 分页写法
    5.1  ?不允许在关键字前后进行数学运算,需要在代码中计算完成后传递到 mapper.xml 中
    5.2 在 java 代码中计算

//显示几个 
int pageSize = 2;
//第几页
int pageNumber = 2;
//如果希望传递多个参数,可以使用对象或 map
Map<String,Object> map = new HashMap<>();
map.put("pageSize", pageSize); map.put("pageStart", pageSize*(pageNumber-1));
List<People> p = session.selectList("a.b.page",map);

  5.3 在 mapper.xml 中代码 

<select id="page" resultType="com.bjsxt.pojo.People" parameterType="map"> 
select * from people limit #{pageStart},#{pageSize}
</select>

六. typeAliases 别名
    1.系统内置别名: 把类型全小写
    2.给某个类起别名
        2.1alias=”自定义”

<typeAliases> 
<typeAlias type="com.bjsxt.pojo.People" alias="peo"/>
</typeAliases>

      2.2mapper.xml 中 peo 引用 People 类 

<select id="page" resultType="peo" parameterType="map"> 
select * from people limit #{pageStart},#{pageSize}
</select>

3.直接给某个包下所有类起别名,别名为类名,不区分大小写

      3.1mybatis.xml 中配置

<typeAliases> 
<package name="com.bjsxt.pojo" />
</typeAliases>

      3.2mapper.xml 中通过类名引用

<select id="page" resultType="People" parameterType="map"> 
select * from people limit #{pageStart},#{pageSize}
</select>

七.MyBatis 实现新增
  1. 概念复习
      1.1 功能:从应用程序角度出发,软件具有哪些功能.
      1.2 业务:完成功能时的逻辑.对应 Service 中一个方法
      1.3 事务:从数据库角度出发,完成业务时需要执行的 SQL 集合,统称一个事务.
          1.3.1 事务回滚.如果在一个事务中某个 SQL 执行事务,希望回归到事务的原点,保证数据库数据的完整性.
  2. 在 mybatis 中默认是关闭了 JDBC 的自动提交功能
      2.1 每一个 SqlSession 默认都是不自动提交事务.
      2.2 session.commit()提交事务.
      2.3 openSession(true);自动提交.setAutoCommit(true);
  3. mybatis 底层是对 JDBC 的封装.
      3.1JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int,表示受影响的行数.
      3.2mybatis 中<insert><delete><update>标签没有 resultType 属性,认为返回值都是 int
  4. 在 openSession()时 Mybatis 会创建 SqlSession 时同时创建一个Transaction(事务对象),同时 autoCommit 都为 false
      4.1 如果出现异常,应该 session.rollback()回滚事务.
  5. 实现新增的步骤
      5.1 在 mapper.xml 中提供<insert>标签,标签没有返回值类型

<insert id="ins" parameterType="People"> 
insert into people values(default,#{name},#{age})
</insert>

      5.2 通过 session.insert()调用新增方法 

int index1 = session.insert("a.b.ins", p); 
if(index1>0){ System.out.println("成功");
}else{ System.out.println("失败"); }

八.MyBatis 实现修改
  1. 在 mapper.xml 中提供<update>标签

<update id="upd" parameterType="People"> 
update people set name = #{name} where id = #{id}
</update>

  2. 编写代码 

People peo = new People();
peo.setId(3); peo.setName("王五");
int index = session.update("a.b.upd", peo);
if(index>0){
System.out.println("成功");
}else{
System.out.println("失败");
}
session.commit();

九.mybatis 实现删除
  1. 在 mapper.xml 提供<delete>标签

<delete id="del" parameterType="int"> 
delete from people where id = #{0}
</delete>

  2. 编写代码 

int del = session.delete("a.b.del",3);
if(del>0){ 
System.out.println("成功"); }else{
System.out.println("失败");
}
session.commit();

 

 

 

 

posted @ 2019-11-19 15:57  古城笙箫  阅读(148)  评论(0)    收藏  举报