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

安防行业网站建设方案论坛网站建设软件

安防行业网站建设方案,论坛网站建设软件,网站项目宣传片,zzzcms建站系统一、MyBatis 连接池:提升数据库访问效率 1. 连接池的本质与作用 本质:连接池是存储数据库连接的 “容器”,负责创建、管理连接,避免频繁创建 / 销毁连接带来的性能损耗。核心问题:若无连接池,每次执行 SQ…

 一、MyBatis 连接池:提升数据库访问效率

1. 连接池的本质与作用

  • 本质:连接池是存储数据库连接的 “容器”,负责创建、管理连接,避免频繁创建 / 销毁连接带来的性能损耗。
  • 核心问题:若无连接池,每次执行 SQL 都需新建 Connection,耗时且影响程序性能。连接池通过复用连接,大幅提升数据库操作效率。

 2. MyBatis 内置连接池分类

 

 二、动态 SQL:灵活拼接查询条件

 MyBatis 的动态 SQL 允许根据参数动态生成 SQL 语句,避免硬编码,提升代码复用性。以下是常用标签及示例:

1. if 标签:条件判断

  • 场景:根据参数是否存在动态拼接查询条件(如用户名、性别过滤)。

 示例:

<select id="findByWhere" parameterType="User" resultType="User">SELECT * FROM user<where><if test="username != null and username != ''">AND username LIKE #{username}</if><if test="sex != null and sex != ''">AND sex = #{sex}</if></where>
</select>
  • 核心where 标签自动处理首个 AND 前缀,避免 WHERE 1=1 硬编码。

2. foreach 标签:批量操作 

  • 场景:处理 IN 条件或批量参数(如根据多个 ID 查询用户)。

 示例 1:OR 拼接

<select id="findByIds" parameterType="User" resultType="User">SELECT * FROM user<where><foreach collection="ids" open="id = " separator=" OR id = " item="i">#{i}</foreach></where>
</select>
  • 生成 SQL:SELECT * FROM user WHERE id = 1 OR id = 2 OR id = 3

 示例 2:IN 集合

<select id="findByIds" parameterType="User" resultType="User">SELECT * FROM user<where><foreach collection="ids" open="id IN (" separator="," close=")" item="i">#{i}</foreach></where>
</select>
  • 生成 SQL:SELECT * FROM user WHERE id IN (1, 2, 3)

 3. sql 标签:提取公用 SQL

  • 作用:将重复 SQL 片段定义为公用模板,通过 <include> 引用,减少代码冗余。

 示例:

<!-- 定义公用 SQL -->
<sql id="findAllSql">SELECT * FROM user
</sql><!-- 引用公用 SQL -->
<select id="findAll" resultType="User"><include refid="findAllSql" />
</select>

三、多表查询:从一对一到多对多

 MyBatis 支持通过 resultMap 实现复杂的多表关联查询,将查询结果映射为包含关联对象的 JavaBean。

 1. 多对一查询(Account → User)

  • 场景:查询账号信息时,关联显示用户名称和地址(如 “账号属于哪个用户”)。

步骤: 

 1、在 Account 类中添加 User 属性:

public class Account {private Integer id;private Integer uid;private Double money;private User user; // 关联用户对象
}

2、使用 association 标签映射关联对象:

<select id="findAll" resultMap="accountMap">SELECT a.*, u.username, u.address FROM account a JOIN user u ON a.uid = u.id
</select><resultMap id="accountMap" type="Account"><result property="id" column="id" /><association property="user" javaType="User"><result property="username" column="username" /><result property="address" column="address" /></association>
</resultMap>

 2. 一对多查询(User → Accounts)

  • 场景:查询用户信息时,关联显示该用户的所有账号(如 “用户拥有哪些账号”)。

步骤: 

1、 在 User 类中添加 List<Account> 属性:

public class User {private Integer id;private String username;private List<Account> accounts; // 关联账号列表
}

2、使用 collection 标签映射集合对象:

<select id="findOneToMany" resultMap="userMap">SELECT u.*, a.money FROM user u LEFT JOIN account a ON u.id = a.uid
</select><resultMap id="userMap" type="User"><result property="id" column="id" /><collection property="accounts" ofType="Account"><result property="money" column="money" /></collection>
</resultMap>

3. 多对多查询(User ↔ Role)

  • 场景:用户与角色是多对多关系(如 “用户拥有多个角色,角色属于多个用户”)。
  • 表结构:通过中间表 user_role 关联 user 和 role 表。

 步骤: 

1、在 User 和 Role 类中分别添加对方的集合属性:

public class User {private List<Role> roles; // 用户拥有的角色列表
}
public class Role {private List<User> users; // 角色关联的用户列表
}

2、使用 collection 标签双向映射:

<!-- 查询角色及关联用户 -->
<select id="findAll" resultMap="roleMap">SELECT r.*, u.username FROM role r JOIN user_role ur ON r.id = ur.rid JOIN user u ON ur.uid = u.id
</select><resultMap id="roleMap" type="Role"><collection property="users" ofType="User"><result property="username" column="username" /></collection>
</resultMap>

四、核心配置文件:SqlMapConfig.xml 要点

1. 数据库连接配置(properties

  • 外部文件引入:将数据库参数(驱动、URL、用户名、密码)存储在 jdbc.properties 中,避免硬编码:
<properties resource="jdbc.properties" />
<dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" />
</dataSource>

2. 类型别名(typeAliases

 简化类名:为实体类设置别名,减少配置中的全路径书写:

<!-- 为单个类设置别名 -->
<typeAlias type="com.qcbyjy.domain.User" alias="user" />
<!-- 为包下所有类自动生成别名(类名小写) -->
<package name="com.qcbyjy.domain" />

3. 映射文件加载(mappers

 引入方式:通过 resource 或 class 引用 Mapper 文件:

<mappers><mapper resource="mappers/UserMapper.xml" /><mapper class="com.qcbyjy.mapper.AccountMapper" /> <!-- 接口与映射文件同名且同路径时可用 -->
</mappers>

http://www.dtcms.com/a/530663.html

相关文章:

  • 企业电子商务网站建设设计目的新建html网站
  • 静态网站开发外文文献怎样登陆wordpress
  • 手机网站对企业用户的好处wordpress如何让导航栏浮动
  • 兰州房地产网站建设小说网站如何做书源
  • 个人网站包含哪些内容中企高呈高端网站建设费用
  • 怎么用nat做网站南京网站制作西安
  • 网站开发的理解郑州一凡网站建设
  • 哪个网站可以做照片分享百度站长链接提交平台
  • 网站怎么利用朋友圈做推广短链接生成源码
  • 凡科建设网站别人能进去么做论坛网站 备案吗
  • 织梦网站怎样做seo南沙定制型网站建设
  • 义乌建设公司网站长春做网站费用
  • 海口智能建站详情徐州服饰网站建设
  • 包头移动官网网站建设政务网站设计
  • 有哪些育儿类网站做的比较好用护卫神做共享网站
  • jsp个人网站怎样做莱芜都市网旗下论坛
  • 网站导航条用什么做如何注册网站怎么注册
  • 高端网站建设公司哪里济南兴田德润实惠吗北京金山办公软件公司
  • 宿州网站建设公司天宁寺网站建设
  • 陇南网站建设个人域名可以做网站吗
  • 微信上如何做网站官方网站开发制作公司
  • html教程网站响应式环保网站
  • i深圳网站建设微信一键登录网站怎么做
  • 网站模版网网页视频怎么下载保存
  • 南宁网站建设seo优化营销制作网页设计图片排版模板
  • 深圳福田网站建设专业公司wordpress最新淘宝客程序
  • 做物流网站电话合肥做网站的公司百度
  • 龙岩网站制作设计高端网站建设公司兴田德润在那里
  • 创意网站建设欣赏北京 科技网站建设
  • 外贸俄罗斯俄语网站开发html用什么软件编写好一点