<dependencies>
<!--dependency>
<groupId>smbms</groupId>
<artifactId>[the artifact id of the block to be mounted]</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
</dependencies>
-
核心配置(mybatis-config.xml)
- configuration 配置(注: 配置询行不能改变)
- properties 属性
- settings 设置
- typeAliases 类型命名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 插件
- environments 环境
- environment 环境变量
- transactionManager 事务管理器
- dataSource 数据源
- mappers 映射器
- configuration 配置(注: 配置询行不能改变)
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
<!-- <setting name="autoMappingBehavior" value="NONE"/>-->
</settings>
<typeAliases >
<!-- 给所有的pojo下的类取别名,为类名-->
<!-- <package name="cn.pojo"/>-->
<!-- 起別名 -->
<typeAlias type="cn.pojo.Provider" alias="Provider"></typeAlias>
<typeAlias type="cn.pojo.User" alias="User"></typeAlias>
<typeAlias type="cn.pojo.Role" alias="Role"></typeAlias>
<typeAlias type="cn.pojo.Address" alias="Address"></typeAlias>
<typeAlias type="cn.pojo.Bill" alias="Bill"></typeAlias>
</typeAliases>
<!-- 配置分页拦截器 -->
<plugins>
<!-- 配置分页插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
<!-- com.mybatis.util为PageHelper类所在包名 -->
<!-- <plugin interceptor="com.mybatis.util.PagePlugin"> -->
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<!-- <property name="dialect" value="SQLite" /> -->
<!-- <property name="pageSqlId" value=".*Page.*" /> -->
<!-- </plugin> -->
</plugins>
<environments default="development">
<environment id="development">
<!-- 事务类型 -->
<transactionManager type="JDBC" />
<!--数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/smbms?serverTimezone=UTC&useUnicode=true& characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 将我们写好的sql映射文件(BillMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="cn/mapper/ProviderMapper.xml" />
<mapper resource="cn/mapper/UserMapper.xml"></mapper>
<mapper resource="cn/mapper/bill/BillMapper.xml"></mapper>
<mapper resource="cn/mapper/role/RoleMapper.xml"></mapper>
</mappers>
</configuration>
-
mapper映射文件(xml)
- cache - 配置给定命名空间的缓存。
- resultMap – 最复杂,高级映射时需要使用。
- sql – 可以重用的 SQL 块,也可以被其他语句引用。
- insert – 映射插入语句
- update – 映射更新语句
- delete – 映射删除语句
- select – 映射查询语句
<mapper namespace="cn.mapper.UserMapper"><!--对应接口名 全限定名-- >
<!-- 缓冲 -->
<cache eviction="LRU" flushInterval="1000" size="512" readOnly="true"></cache>
<!-- Sql块 -->
<sql id="selectAll">
select * from
</sql>
<!-- insert,并且获得且返回主键,赋给bookid
useGeneratedKeys="true":返回主键;
keyProperty="bookid":主键赋值到的属性 -->
<insert id="insert" parameterType="tbbook" useGeneratedKeys="true" keyProperty="bookid">
insert into tbbook values(null,#{bookname},#{price},#{publisher})
</insert>
<!-- update -->
<update id="update" parameterType="tbbook">
update tbbook set bookname=#{bookname},price=#{price},publisher=#{publisher} where bookid=#{bookid}
</update>
<!-- delete -->
<delete id="delete" parameterType="int">
delete from tbbook where bookid=#{bookid}
</delete>
<resultMap id="userAddressResult" type="User">
<id property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="userRole" column="userRole"/>
<collection property="addressList" ofType="Address">
<id property="id" column="id"></id>
<result property="postCode" column="postCode"></result>
<result property="tel" column="tel"></result>
<result property="contact" column="contact"></result>
<result property="addressDesc" column="addressDesc"></result>
</collection>
</resultMap>
<!-- 多表联查所需要的对象 property对应数据库的属性 column对应数据库的字段-->
<resultMap id="userRoleResult" type="User">
<id property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="userRole" column="userRole"/>
<!--association 是一个对象-->
<association property="role" javaType="Role">
<id property="id" column="id"></id>
<result property="roleCode" column="roleCode"></result>
<result property="rloeName" column="rloeName"></result>
</association>
</resultMap>
<select id="getUserListByRoleId" parameterType="integer" resultMap="userRoleResult">
select u.*,r.id as r_id,r.roleCode,r.roleName from smbms_user u,smbms_role r
where u.userRole=#{userRole} and u.userRole=r.id
</select>
<!-- if 结构-->
<select id="getUserListThreefour" resultMap="userList">
select u.*,r.roleName from smbms_user u,smbms_role r
where u.userRole=r.id
<if test="userRole != null">
and u.userRole=#{userRole}
</if>
<if test="userName != null and userName != ''">
and u.userName like CONCAT ('%',#{userName} ,'%')
</if>
</select>
<!--where 结构 如果条件成立会自动在后面加个where 若第一有and 或 or 会自动剔除-->
<select id="getUserListThreefive" resultType="User">
select * from smbms_user
<where>
<if test="userRole != null">
and u.userRole=#{userRole}
</if>
<if test="userName != null and userName != ''">
and u.userName like CONCAT ('%',#{userName} ,'%')
</if>
</where>
</select>
<!--tirm 可以用来替换where prefix代表前缀-->
<select id="getUserListThreesix" resultType="User">
select * from smbms_user
<trim prefix="where" prefixOverrides="and | or">
<if test="userRole != null">
and u.userRole=#{userRole}
</if>
<if test="userName != null and userName != ''">
and u.userName like CONCAT ('%',#{userName} ,'%')
</if>
</trim>
</select>
<!--set-->
<update id="modifyThree" parameterType="User" >
update smbms_user
<set>
<if test="userCode != null">userCode=#{userCode},</if>
<if test="userName != null">userName=#{userName},</if>
<if test="userPassword != null">userPassword=#{userPassword},</if>
<if test="gender != null">gender=#{gender},</if>
<if test="birthday != null">birthday=#{birthday},</if>
<if test="phone != null">phone=#{phone},</if>
<if test="address != null">address=#{address},</if>
<if test="userRole != null">userRole=#{userRole},</if>
<if test="createdBy != null">createdBy=#{createdBy},</if>
<if test="creationDate != null">creationDate=#{creationDate},</if>
<if test="createdBy != null">createdBy=#{createdBy},</if>
<if test="userRole != null">userRole=#{userRole},</if>
<if test="createdBy != null">createdBy=#{createdBy},</if>
</set>
where id=#{id}
</update>
<!--查询一对多 collection 代表传来的对象-->
<select id="getUserByRoleId_foreach_array" resultMap="userMapByRole">
select *from smbms_user where userRole in
<foreach collection="array" item="roleIds"
open="(" separator="," close=")" >
#{roleIds}
</foreach>
</select>
<!--相当于switch 若成立一个则结束 ,若不成立则用otherwise-->
<select id="getUserList_choose" resultType="User">
select *from smbms_user where 1=1
<choose>
<when test="userName != null and userName != ''">
and userName like CONCAT ('%',#{userName} ,'%')
</when>
<when test="userCode != null and userCode != ''">
and userCode like CONCAT ('%',#{userCode} ,'%')
</when>
<when test="userRole != null and userRole != ''">
and userRole=#{userRole} ,'%')
</when>
<otherwise>
and year(creationDate)=year(#{creationDate} )
</otherwise>
</choose>
</select>
</mapper>
-
特别注释
mybatis核心配置mybatis-config.xml 一般放置在 resources文件中
例:
pojo 放实体类
mapper 放置接口和对应的xml配置文件
resources 放置核心配置文件
webapp 放置jsp文件
untils 放置工具类(MyBatisUtil)
Test 放置测试类
public class MyBatisUtil {
private static SqlSessionFactory factory;
<!--静态块 用来创建工厂-->
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = getResourceAsStream(resource);
factory= new SqlSessionFactoryBuilder().build(inputStream);
}catch (Exception e){
e.printStackTrace();
}
}
<!--打开SqlSession-->
public static SqlSession createSqlSession(){
return factory.openSession(false);
}
<!--关闭SqlSession-->
public static void closeSqlSession(SqlSession sqlSession){
if (null != sqlSession) {
sqlSession.close();
}
}
}
@Test 测试类
public void test02() throws IOException {
SqlSession sqlSession= MyBatisUtil.createSqlSession();
List<Provider> providers=null;
providers=sqlSession.getMapper(ProviderMapper.class).selectList();
for (Provider provider : providers) {
System.out.println(provider.getProName());
}
}