MyBatis是一款流行的持久层框架,简化了JDBC操作。以下是其基础入门语法:
1.核心配置文件(mybatis-config.xml)
用于配置数据库连接和映射文件位置。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="com.mysql.cj.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/test"/><propertyname="username"value="root"/><propertyname="password"value="password"/></dataSource></environment></environments><mappers><mapperresource="UserMapper.xml"/></mappers></configuration>2.SQL映射文件(UserMapper.xml)
定义SQL语句与Java方法的映射关系。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.mapper.UserMapper"><!-- 查询单个用户 --><selectid="selectUser"parameterType="int"resultType="com.example.entity.User">SELECT * FROM users WHERE id = #{id}</select><!-- 插入用户 --><insertid="insertUser"parameterType="com.example.entity.User">INSERT INTO users (name, age) VALUES (#{name}, #{age})<!-- 获取自增主键 --><selectKeykeyProperty="id"resultType="int"order="AFTER">SELECT LAST_INSERT_ID()</selectKey></insert></mapper>3.Java实体类(User.java)
对应数据库表结构。
publicclassUser{privateIntegerid;privateStringname;privateIntegerage;// getters/setters}4.Mapper接口(UserMapper.java)
定义操作数据库的方法。
publicinterfaceUserMapper{UserselectUser(intid);intinsertUser(Useruser);}5.获取SqlSession并执行操作
// 加载配置文件InputStreaminputStream=Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);// 执行查询try(SqlSessionsession=sqlSessionFactory.openSession()){UserMappermapper=session.getMapper(UserMapper.class);Useruser=mapper.selectUser(1);System.out.println(user.getName());}6.动态SQL
根据条件动态生成SQL语句。
<selectid="findUsers"resultType="User">SELECT * FROM users<where><iftest="name != null">AND name = #{name}</if><iftest="age != null">AND age>#{age}</if></where></select>7.参数处理
#{}:预编译处理(防止SQL注入)${}:直接替换(用于表名、列名等)
<selectid="selectUsers"resultType="User">SELECT * FROM ${tableName} WHERE age > #{minAge}</select>8.结果映射
处理列名与属性名不一致的情况。
<resultMapid="userResultMap"type="User"><idproperty="id"column="user_id"/><resultproperty="name"column="user_name"/></resultMap><selectid="selectUser"resultMap="userResultMap">SELECT user_id, user_name FROM users WHERE id = #{id}</select>9.事务管理
SqlSessionsession=sqlSessionFactory.openSession(false);// 手动提交try{UserMappermapper=session.getMapper(UserMapper.class);mapper.insertUser(user1);mapper.insertUser(user2);session.commit();// 提交事务}catch(Exceptione){session.rollback();// 回滚事务throwe;}finally{session.close();}10.注解方式(替代XML)
publicinterfaceUserMapper{@Select("SELECT * FROM users WHERE id = #{id}")UserselectUser(intid);@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")@Options(useGeneratedKeys=true,keyProperty="id")intinsertUser(Useruser);}