Spring框架基础(六)之mybatis框架基础

xiaoxiao2025-10-12  12

mybatis入门基础

1. mybatis定义:2. mybatis 架构的核心构成4. mapper 映射器规则5.多个参数的传递问题6.当表中字段和实体类中的属性值不一致是,解决方法(请尽量保持一致)

1. mybatis定义:

mybatis 是一个支持普通SQL查询,存储过程和高级映射(ORM)的持久层框架。

它封装了几乎所有的JDBC代码和参数的手工设置。

2. mybatis 架构的核心构成

Java中的实体bean; SQL定义文件 mapper.xml主要用来定义SQL语句的

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="com.xdl.dao.XdlBankAccountDAO"> <!-- 定义SQL语句 --> <select id="findById" parameterType="int" resultType="com.xdl.bean.XdlBankAccount"> select * from xdl_bank_account_23 where id = #{n} </select> <!-- 定义一个多参 sql 的查询语句 --> <select id="findAccountByAccNoAndPassword3" resultType="com.xdl.bean.XdlBankAccount" > select * from xdl_bank_account_23 where acc_no = #{0} and acc_password = #{1} </select> <!-- 根据id 更新密码 --> <update id="updatePasswordById" parameterType="com.xdl.bean.XdlBankAccount" > update xdl_bank_account_23 set acc_password = #{acc_password} where id = #{id} </update> </mapper>

mybatis 的主配置文件sqlmap-config.xml 定义链接数据库信息和加载SQL定义文件

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration> <environments default="environment"> <environment id="environment"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> <property name="username" value="system" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/xdl/mapper/XdlBankAccountMapper.xml" /> </mappers> </configuration>

mybatis 的API 通过SqlSession体现,可封装成工具类调用,如下:

public class SqlSessionUtil { private static SqlSessionFactory ssf = null; static { // 构建一个SqlSession工厂的构建器 SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder(); // 得到 SqlSession 工厂 需要关联 src下主配置文件对应的流 InputStream inputStream = User.class.getClassLoader().getResourceAsStream("sqlmap-config.xml"); ssf = ssfb.build(inputStream); } public static SqlSession getSqlSession(){ return ssf.openSession(); } class user{} }

4. mapper 映射器规则

就是可以 根据接口 自动生成实现类 ,但须注意以下点:

sql 定义文件的id作为接口的方法名,parameterType的值 作为方法的参数类型 resultType的值 作为方法的返回值类型,如果返回多个值 用List<resultType类型>, 如果是增删改,可以使用int或者void.如果是增删改,可以使用int或者void.Sql 定义文件中的namespace 必须是“包名 . 接口名 ”

5.多个参数的传递问题

使用Map类型 或者对象类型的参数 来封装多个参数 如: <!-- 根据账号和密码查询账户--> <select id = "findByNoAndPassword" parameterType="map" resultType = "com.xdl.bean.BankUser"> select * from bankuser where no = #{ no } and password = #{password} </select > /* 构建一个Map类型的一个参数*/ Map<Integer,String> parames = new HashMap(); parames.put("no",10000); parames.put("password" , "abc123"); BankUser user = SqlSession对象 . selectOne("findByNoAndPassword" , parames);

当返回值类型是一个值是用selectOne()方法,多个值时用selectList()方法

但设计多个参数时 parameterType 可不写,参数位置可直接写 #{0 } #{1 } 或者#{parame1} #{parame2} 或者使用注解@param(“参数名”)

6.当表中字段和实体类中的属性值不一致是,解决方法(请尽量保持一致)

使用sql 语句的别名 统一数据库中字段和实体类中的属性名 , 如: <select id="findById3" parameterType="int" resultType="com.xdl.bean.BankUser2"> select id,acc_no accNo,acc_name accName,acc_password accPassword,acc_money accMoney from bankuser where id = #{id } </select> 使用resultMap 来指定表中字段名和实体类属性对应关系,不可与resultType同时使用,如: <resultMap type="com.xdl.bean.XdlBankAccount2" id="account2Map"> <result column="acc_no" property="accNo"/> <result column="acc_name" property="accName"/> <result column="acc_password" property="accPassword"/> <result column="acc_money" property="accMoney"/> </resultMap> #### 7.
转载请注明原文地址: https://www.6miu.com/read-5037763.html

最新回复(0)