当前位置: 首页 > wzjs >正文

代销网站源码免费域名注册二级域名

代销网站源码,免费域名注册二级域名,新疆乌鲁木齐网架公司,洛阳网新闻中心第二章:从查询到完整CRUD - 功能全面升级 在上一篇文章中(MyBatis框架入门指南:从零开始掌握持久层框架-CSDN博客),我们主要介绍了MyBatis的基本查询操作。现在,我们将全面扩展功能,实现完整的CRUD(创建、…

第二章:从查询到完整CRUD - 功能全面升级

在上一篇文章中(MyBatis框架入门指南:从零开始掌握持久层框架-CSDN博客),我们主要介绍了MyBatis的基本查询操作。现在,我们将全面扩展功能,实现完整的CRUD(创建、读取、更新、删除)操作,这是数据库应用开发中最核心的功能。

2.1 增删改查操作详解

2.1.1 新增操作(Create)
<insert id="insert" parameterType="User"><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select last_insert_id()</selectKey>insert into user(username, birthday, sex, address) values(#{username}, #{birthday}, #{sex}, #{address})
</insert>

关键点解析:

<selectKey>标签用于获取插入后的自增主键值

keyProperty指定将返回的主键值设置到JavaBean的哪个属性

order="AFTER"表示在插入语句执行后获取主键

MySQL的last_insert_id()函数获取最后插入的ID

2.1.2 删除操作(Delete)
<delete id="delete" parameterType="Integer">delete from user where id = #{id}
</delete>

注意事项:

  • 删除操作通常需要事务控制

  • 实际项目中建议使用逻辑删除而非物理删除

2.1.3 更新操作(Update)
<update id="update" parameterType="User">update user set username=#{username}, birthday=#{birthday}, sex=#{sex}, address=#{address} where id=#{id}
</update>

2.2 模糊查询的两种实现方式对比

方式一:SQL中直接拼接(使用${})
<select id="findByName" resultType="User" parameterType="string">select * from user where username like '%${value}%'
</select>

特点:

${}是字符串替换,直接将参数拼接到SQL中

存在SQL注入风险

必须使用value作为参数名

方式二:参数中传递通配符(使用#{})
<select id="findByName" resultType="User" parameterType="string">select * from user where username like #{name}
</select>

调用时:

mapper.findByName("%王%");

特点:

#{}是预编译处理,更安全

可以使用任意参数名

通配符逻辑在Java代码中控制

第三章:深入理解参数与结果映射

3.1 parameterType的三种使用场景

3.1.1 简单类型参数
<select id="findById" parameterType="int" resultType="User">select * from user where id = #{id}
</select>

类型处理:

  • MyBatis内置了Java基本类型的别名

  • 当参数是单个简单类型时,#{}中的名称可以任意

3.1.2 POJO对象参数
<insert id="insert" parameterType="User">insert into user(username, sex) values(#{username}, #{sex})
</insert>

工作原理:

  • MyBatis通过OGNL表达式获取对象属性值

  • 属性名必须与POJO中的属性名一致

3.1.3 包装对象参数
public class QueryVo {private User user;private String roleName;// getter/setter
}
<select id="findByVo" parameterType="QueryVo" resultType="User">select * from user where username = #{user.username} and role = #{roleName}
</select>

应用场景:

  • 复杂查询条件

  • 多表关联查询参数

  • 分页查询参数封装

3.2 resultType与resultMap的选择

3.2.1 resultType的自动映射
<select id="findAll" resultType="User">select id, username, sex from user
</select>

 

适用条件:

  • 数据库列名与Java属性名一致(或符合下划线转驼峰规则)

  • 查询结果不需要特殊处理

3.2.2 resultMap的显式映射 
<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="username" column="user_name"/><result property="sex" column="user_sex"/>
</resultMap><select id="findAll" resultMap="userResultMap">select user_id, user_name, user_sex from t_user
</select>
  • 数据库字段名与Java属性名不一致

  • 复杂的结果集映射(如一对一、一对多)

  • 需要自定义类型处理

第四章:配置文件深度解析

4.1 数据源配置详解

<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment>
</environments>

 

关键配置项:

  1. 事务管理器(transactionManager)

    • type="JDBC":使用JDBC的事务管理

    • type="MANAGED":由容器管理事务

  2. 数据源(dataSource)

    • type="UNPOOLED":不使用连接池

    • type="POOLED":使用MyBatis内置连接池

    • type="JNDI":使用JNDI获取数据源

生产建议: 实际项目中通常使用Druid等专业连接池

4.2 类型别名的最佳实践

<typeAliases><!-- 为单个类定义别名 --><typeAlias type="com.example.domain.User" alias="User"/><!-- 为整个包下的类定义别名 --><package name="com.example.domain"/>
</typeAliases>
  1. 别名使用技巧:

  2. 简单类名作为别名(首字母大小写不敏感)

  3. 在团队中建立统一的别名规范

  4. 避免过度使用别名导致可读性下降

实战经验分享

5.1 参数传递的常见问题

问题1: 多个简单类型参数如何传递?

解决方案:

  1. 使用@Param注解:

    User findByCond(@Param("name") String name, @Param("sex") String sex);
    <select id="findByCond" resultType="User">select * from user where username=#{name} and sex=#{sex}
    </select>

  2. 使用Map封装参数:

    Map<String, Object> params = new HashMap<>();
    params.put("name", "张三");
    params.put("sex", "男");
    mapper.findByMap(params);

问题2: 如何实现分页查询?

解决方案:

  1. 使用RowBounds(内存分页,不推荐大数据量)

  2. 使用PageHelper插件(推荐)

  3. 手动编写分页SQL

5.2 结果映射的高级技巧

技巧1: 自动映射下划线转驼峰

在配置文件中开启:

<settings><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

技巧2: 处理枚举类型

public enum Sex {MALE("男"), FEMALE("女");private String value;// 构造方法和getter
}
<resultMap id="userMap" type="User"><result property="sex" column="sex" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
</resultMap>

总结与展望

本文深入讲解了MyBatis的CRUD操作实现、参数传递机制和结果映射策略。相比基础篇,我们增加了:

  1. 完整的增删改查操作实现

  2. 多种参数传递方式的对比

  3. 结果集映射的详细解析

  4. 配置文件的最佳实践

  5. 实际开发中的经验技巧

 

http://www.dtcms.com/wzjs/190094.html

相关文章:

  • 如何做网签合同 网站哪个搜索引擎最好
  • vb.net做网站提升seo搜索排名
  • 店铺推广方法百度免费seo
  • 中国国际贸易单一窗口网站重庆做seo外包的
  • 介绍好的免费网站模板下载个人主页网页设计
  • 温州网站建设咨询网络推广的公司是骗局吗
  • 一个网站多个域名备案百度站长社区
  • 网站模板文章资讯百度推广网址是多少
  • 湖南中高风险地区seo网站推广技术
  • 青海省建设厅勘察设计备案网站百度搜索量统计
  • 软件工程师英文北京seo关键词优化收费
  • 网站外网访问怎么做路由器端口映射网络舆情优化公司
  • 网站建设标书样本百度做个人简介多少钱
  • 做行程的网站 哪个最好登封网站建设公司
  • 深圳做网站jm3q网站的建设流程
  • 荔湾区做网站信息流优化
  • mvc6 网站开发实战客户关系管理系统
  • 石碣镇仿做网站seo优化工作有哪些
  • 建设信用卡银行积分兑换商城网站建一个自己的网站
  • 深圳微信网站制作合肥seo排名扣费
  • 360免费建站 服务期什么时候网络推广
  • 秦皇岛网站定制哪家好南京seo整站优化技术
  • 网站设计顺德网购平台推广方案
  • 知名做网站公司制作网站用什么软件
  • 建视频网站网络营销的平台有哪些
  • 秒赞网站建设seoul怎么读
  • 建设企业网站新闻开发的意义乐天seo培训
  • 包头市住房和城乡建设局官方网站百度点击软件名风
  • 婚纱摄影网站源码实事新闻热点
  • 网站目录层级建设找客户的软件有哪些