mybatis 学习汇总
需要的文件
jdbc.properties
SqlMapConfig.xml
mybatis 配置
pom.xml
需要的 pom 依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
在 pom 中指定资源的位置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
jdbc.properties
jdbc 配置:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
SqlMapConfig.xml
xml 配置:
作用:用于加载并引用属性文件
<properties resource="jdbc.properties"/>
作用:输出日志
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
作用:为实体起别名
单个
<typeAliases>
<typeAlias type="com.zjh.model.Student" alias="student"/>
</typeAliases>
批量
<typeAliases>
<package name="com.zjh.model"/>
</typeAliases>
作用:用于配置MyBatis的运行环境信息
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
作用:用来将SQL语句映射到Java对象的方法
<mappers>
// 单个注册,在resource下
<mapper resource="StudentMapper.xml"></mapper>
// 单个注册,在java下
<mapper class="com.zjh.mapper.StudentMapper"></mapper>
// 批量注册,在java下
<package name="com.zjh.mapper"/>
</mappers>
CRUD
查询字段-include
<sql id="allColumns">
id, username, birthday date, sex, address
</sql>
// 使用
<include refid="allColumns"></include>
模糊查询:
where username like concat('%', #{name}, '%')
where-if
作用:任意多个条件查询
<where>
<if test="userName != null and userName!= ''">
and username like concat('%', #{userName}, '%')
</if>
<if test="date != null">
and birthday = #{date}
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
<if test="address != null and address != ''">
and address like concat('%', #{address}, '%')
</if>
</where>
foreach
作用:循环遍历
collection:接受传入的内容,如果是List集合,值为list,如果是数组,值为array,如果是Map,值为map
item:遍历的临时变量或对象
separator:多个值之间的分隔符
open,close:整个循环的最外层的括号
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
set-if
作用:任意多个条件的更新
<set>
<if test="user.userName != null and user.userName != ''">
username = #{user.userName},
</if>
<if test="user.date != null">
birthday = #{user.date},
</if>
<if test="user.sex != null and user.sex != ''">
sex = #{user.sex},
</if>
<if test="user.address != null and user.address != ''">
address = #{user.address},
</if>
</set>
resultMap
使用:当数据库列名与实体类字段名不一致时或实体类关联了其他对象
多对一或一对一:Order 实体类持有 Customer 对象,使用 association
<resultMap id="orderMap" type="Order">
<id column="oid" property="id"></id>
<result column="orderNumber" property="number"></result>
<result column="orderPrice" property="price"></result>
<association property="customer" javaType="Customer">
<id column="cid" property="id"></id>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
</association>
</resultMap>
一对多或多对多:Customer 实体类持有 Order 集合,使用 collection
<resultMap id="customerMap" type="Customer">
<id column="cid" property="id"></id>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
<collection property="orders" ofType="Order">
<id column="oid" property="id"></id>
<result column="orderNumber" property="number"></result>
<result column="orderPrice" property="price"></result>
</collection>
</resultMap>
小知识
resultType(resultMap):是数据输出类型
parameterType:数据输入类型
测试
使用 mybatis 进行 crud:增加,删除,修改需要添加 sqlSession.commit();来确保对数据库所做的更改被保存
SqlSession sqlSession;
UserMapper userMapper;
//方法前调用
@Before
public void openSqlSession() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = factory.openSession(true);
userMapper = sqlSession.getMapper(UserMapper.class);
}
//方法后调用
@After
public void closeSqlSession() {
sqlSession.close();
}
增加
@Test
public void testAdd() throws ParseException {
User user = new User("赵789", simpleDateFormat.parse("2000-04-04"), '女', "深圳");
int add = userMapper.add(user);
System.out.println(add);
sqlSession.commit();
}
知识点练习