mybatis二次

增删改

  增删改都需要程序员通过session.commit提交事务

MyBatis中如何去集成log4有什么作用:可以 在控制台打印出SQL语句 ;

MyBatis中如何去集成log4j

   步骤1:在pom.xml中添加一个log4j依赖
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
   步骤2:在Resource目录中添加一个名称为log4j.property文件

添加

添加的DAO代码:

public  int addStudent(studentinfo stu);
小配置里的代码
<insert id="addStudent">
    INSERT INTO studentinfo(stuName,stuAge,stuDate) VALUE (#{stuName},#{stuAge},#{stuDate})

</insert>
添加的单侧的代码
 @Test
  //02.根据主键查询单个对象
  public void add(){
      String path="MyBatis-config.xml";
      InputStream is= null;
      try {
          is = Resources.getResourceAsStream(path);
          SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
          SqlSession session=factory.openSession();
          IStudentInfoDAO dao = session.getMapper(IStudentInfoDAO.class);
          studentinfo stu=new studentinfo();
          stu.setStuName("太阳");
          stu.setStuAge(33);
           stu.setStuDate(new Date());
           dao.addStudent(stu);
           session.commit();
          System.out.println("ok!");
          session.close();
      } catch (IOException e) {
          e.printStackTrace();
      }

  }

修改的DAO代码:

//修改
    public int updateStudent(studentinfo info);
小配置 里面的修改代码:
<update id="updateStudent">
    UPDATE studentinfo SET stuName=#{stuName} where stuId=#{stuId}
</update>
修改的单侧
//修改
    @Test
    public void xg() throws  Exception
    {
//
        SqlSession session=myBatis.getSqlSession();
        IStudentInfoDAO dao=session.getMapper(IStudentInfoDAO.class);
        studentinfo stu=new studentinfo();
        stu.setStuName("星星");
        stu.setStuId(2);
        dao.updateStudent(stu);
        session.commit();
        System.out.println("完美");
        session.close();


    }*/

删除的DAO代码:

 //删除public int deleteStudent(int stuid);
小配置 里面的删除代码:
<delete id="deleteStudent">
    DELETE from studentinfo where stuId=#{stuId}
</delete>


删除单侧
//删除
/*@Test
public void xc() throws  Exception
{
//
    SqlSession session=myBatis.getSqlSession();
    IStudentInfoDAO dao=session.getMapper(IStudentInfoDAO.class);
    dao.deleteStudent(3);
    session.commit();
    System.out.println("ok");
    session.close();

}*/
.util:工具类层
 public class MyBatisUtil {
    //Mybatis
    static String path="Mybatis-config.xml";

    static SqlSessionFactory factory;
    static{
        try {
            InputStream is = Resources.getResourceAsStream(path);
        factory= new SqlSessionFactoryBuilder().build(is);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSession(){
        return factory.openSession();
    }
}
底层数据表中的列和实体类中的属性,只要有一个不匹配,MyBatis框架就不能自动的帮我们装配对象了。装配出来的是null

---------多条件查询----------------------------------
select * from studentinfo where stuname like '%' #{stuName}  '%' and stuAge>#{stuAge}

select * from studentinfo where stuname like concat('%',#{stuName},'%') and stuAge>#{stuAge}

select * from studentinfo where stuname like '%${stuName}%' and stuAge>#{stuAge}

-------SQL片段:主要解决多个列重复书写的问题
< sql id="columns">
   stuid,stuname
< /sql>


MyBatis 的“二级联动”并不是 MyBatis 框架内直接提供的一种功能,而是指在项目中通过两查询数据库并互相依赖返回结果的场景下完成的功能,一般会出现在前端的选择框(如省市区选择、商品分类等)。这里我将为你介绍一种基于 MyBatis 实现这种效果的方式。 假设我们有一个需求,在页面上先展示省份信息供用户选择,当选择了某个省份之后再从后台加载该省下面的所有城市信息,并更新到另一个选择框里。这就可以理解为“一级地区 - 二级地区”的关联显示或筛选操作了。 为了实现这个过程: ### 数据库设计 通常我们会创建两个表来存储这两个层级的数据,例如 `province` 表用于存放省级行政区划的信息,而 `city` 表则保存市级区域的相关数据。同时为了能够快速地获取某省下的所有市,可以考虑在这两张表之间建立外键约束或其他形式的关系字段(比如 parent_id 等),以此表明它们之间的父子级联关系。 ```sql CREATE TABLE province ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL UNIQUE COMMENT '省份名称' ); CREATE TABLE city ( id INT PRIMARY KEY AUTO_INCREMENT, province_id INT NOT NULL COMMENT '所属省份ID', name VARCHAR(50) NOT NULL COMMENT '城市名称', FOREIGN KEY (province_id) REFERENCES province(id) ); ``` ### Mapper XML 配置文件编写 接下来需要配置对应的 MyBatis 映射器XML 文件来进行 SQL 查询映射工作。对于上述案例来说,我们可以分别写出针对每个实体类的操作语句。首先是 `ProvinceMapper.xml` 中的部分内容: #### ProvinceMapper.xml ```xml <mapper namespace="com.example.mapper.ProvinceMapper"> <!-- 查询所有的省份 --> <select id="selectAllProvinces" resultType="com.example.entity.Province"> SELECT * FROM province; </select> <!-- 根据省份id查找对应的城市列表 --> <select id="findCitiesByProvinceId" parameterType="int" resultMap="CityResultMap"> SELECT c.* FROM city AS c WHERE c.province_id = #{provinceId}; </select> <resultMap type="com.example.entity.City" id="CityResultMap"> <id column="id" property="id"/> <result column="name" property="name"/> </resultMap> </mapper> ``` 然后就是具体的 Java 接口定义以及 Service 层处理逻辑... ### 关于前后端交互部分: 1. **首请求**:客户端向服务器发送 AJAX 请求以获得初始的一级选项集合; 2. 当前用户做出更改动作时触发事件处理器函数监听值的变化情况;此时应该携带选中的项作为附加参数传递给服务端API接口。 3. 后台接收到消息后依据传入的关键字再发起新一轮的数据抓取任务并将结果集反馈回去... 4. 成功接收响应包体里的JSON数组结构化表示法所描述的新一批候选项序列,紧接着动态渲染HTML元素节点至目标容器位置处即可。 总之,“mybatis 二级联动”的本质是在一完整的业务流程当中包含了连续性的多交互行为模式。其中涉及到的主要技术点有但不限于Ajax异步通信机制、RESTful API 设计风格的服务端路由规划思路、JavaScript 或 jQuery 库提供的DOM操纵能力等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值