MyBatis学习笔记(入门)

目录结构

     

maven依赖

                <!-- spring jar包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.3.16.RELEASE</version>
		</dependency>

		<!-- mysql启动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.44</version>
		</dependency>

		<!-- mybatis jar包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.5</version>
		</dependency>

generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator 
  Configuration 1.0//EN"    
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
    <generatorConfiguration>
	
	<!--从本地获取  指定数据连接驱动jar包地址 -->
	<classPathEntry location="F:/LETVdownload/mysql-connector-java-5.1.43.jar" />

	<!-- 一个数据库一个context -->
	<context id="infoGuardian">
		<!-- 注释 -->
		<commentGenerator>
			<property name="suppressAllComments" value="true" /><!-- 是否取消注释 -->
			<property name="suppressDate" value="false" /> <!-- 是否生成注释代时间戳 -->
		</commentGenerator>

		<!-- jdbc连接 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver" 
		                connectionURL="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
			userId="xxxx" password="xxxx" />
		<!-- 类型转换 -->
		<javaTypeResolver>
			<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- 生成实体类地址...User.java  targetProject是项目名-->
		<javaModelGenerator targetPackage="com.jst.springboot.entity" 
		  targetProject="SpringMybatis">
			<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
			<property name="enableSubPackages" value="false" />
			<!-- 是否针对string类型的字段在set的时候进行trim调用 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>

	<!-- 生成mapxml文件       UserMapper.xml-->
	<sqlMapGenerator targetPackage="com.jst.springboot.mapper"
		targetProject="SpringMybatis">
		<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
		<property name="enableSubPackages" value="false" />
	</sqlMapGenerator>

	<!-- 生成mapxml对应client,也就是接口dao   UserMapper.java接口 -->
	<javaClientGenerator targetPackage="com.jst.springboot.mapper"
		targetProject="SpringMybatis" type="XMLMAPPER">
		<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
		<property name="enableSubPackages" value="false" />
	</javaClientGenerator>

		<!-- 配置表信息 -->
		<!-- schema:数据库名   tableName:表名    domainObjectName:生成文件名称   -->
		<table schema="test" tableName="student" domainObjectName="Student"
			enableCountByExample="false" enableUpdateByExample="false"
			enableDeleteByExample="false" enableSelectByExample="false"
			selectByExampleQueryId="false">
			<property name="useActualColumnNames" value="true" />
		</table>
		
	</context>
</generatorConfiguration>

mybatis-config.xml  配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--通过这个配置文件,完成mybatis与数据库的连接 -->
<configuration>
	<!-- 引入database.properties文件 -->
	<properties resource="database.properties" />

	<!-- 设置别名 -->
	<typeAliases>
		<!-- 使用Users代替org.lwj.mybatis.bean包下的Users类 -->
		<typeAlias alias="Users" type="org.lwj.mybatis.bean.Users" />
	</typeAliases>

	<!-- 对事务的管理和连接池的配置 -->
	<environments default="development">
		<environment id="development">
			<!-- 配置事务管理 ,采用JDBC管理事务 -->
			<transactionManager type="JDBC" />
			<!-- POOLED是mybatis的 数据源 -->
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>

	<!-- pojo的映射文件UserMapper引入到配入到配置文件中 -->
	<mappers>
		<!-- resource要写成路径 -->
		<mapper resource="mapper/xml/UsersMapper.xml" />

		<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
		<!-- <package name="com/cy/mybatis/mapper"/> -->
	</mappers>
</configuration>

UsersMapper.xml   映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
//namaspace(命名空间):对应的mapper接口位置
<mapper namespace="org.lwj.mybatis.mapper.UsersMapper">
	
	<select id="selectById" parameterType="int" resultType="Users">
		select * from users where uID=#{id}
	</select>
</mapper>

UsersMapper.java   Java API  

package org.lwj.mybatis.mapper;

import org.lwj.mybatis.bean.Users;

public interface UsersMapper {
	Users selectById(int id);
}

Users.java

package org.lwj.mybatis.bean;

public class Users {
	private Integer uID;
	private String uName;
	private Integer uAge;
	private char uSex;
	private String uGrade;
	public Integer getuID() {
		return uID;
	}
	public void setuID(Integer uID) {
		this.uID = uID;
	}
	public String getuName() {
		return uName;
	}
	public void setuName(String uName) {
		this.uName = uName;
	}
	public Integer getuAge() {
		return uAge;
	}
	public void setuAge(Integer uAge) {
		this.uAge = uAge;
	}
	public char getuSex() {
		return uSex;
	}
	public void setuSex(char uSex) {
		this.uSex = uSex;
	}
	public String getuGrade() {
		return uGrade;
	}
	public void setuGrade(String uGrade) {
		this.uGrade = uGrade;
	}
	@Override
	public String toString() {
		return "Users [uID=" + uID + ", uName=" + uName + ", uAge=" + uAge + ", uSex=" + uSex + ", uGrade=" + uGrade
				+ "]";
	}

}

DBTool.java   读取配置文件

package org.lwj.mybatis.tools;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DBTool {
	public static SqlSessionFactory sessionFactory;

	static {
		try {
			//第一种方法
                      //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
                      InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);
                      //构建sqlSession的工厂
                      SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

                        //第二种方法
                        // 使用MyBatis提供的Resources类加载mybatis的配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 构建sqlSession的工厂sessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) {e.printStackTrace();}}// 创建能执行映射文件中sql的sqlSessionpublic static SqlSession getSession() {return sessionFactory.openSession();}}

MybatisTest2.java    测试文件

package org.lwj.test;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.lwj.mybatis.bean.Users;
import org.lwj.mybatis.mapper.UsersMapper;
import org.lwj.mybatis.tools.DBTool;
/*import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;*/

//@SpringBootApplication
//@MapperScan("org.lwj.mybatis.mapper")
public class MybatisTest2 {
	
	@Test
	public void test() {
		/*ApplicationContext context=SpringApplication.run(MybatisTest2.class);
		UsersMapper usersMapper=context.getBean(UsersMapper.class);
		Users user=usersMapper.selectById(2);
		System.out.println(user.toString());*/
		select();		
	}
	
	public void select() {
		SqlSession session=DBTool.getSession();
		UsersMapper usersMapper=session.getMapper(UsersMapper.class);
		try {
			Users user=usersMapper.selectById(2);
			System.out.println(user.toString());
			session.commit();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			session.rollback();
		}
	}
}

使用generatorConfig.xml 自动生成UsersMapper.xml、Users.java、UsersMapper.java,然后用mybatis-config.xml 去读取UsersMapper.xml,最后用DBTool.java加载mybatis-config.xml

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

  • cache     – 给定命名空间的缓存配置。
  • cache-ref – 其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • sql          – 可被其他语句引用的可重用语句块。
  • insert     – 映射插入语句
  • update    – 映射更新语句
  • delete     – 映射删除语句
  • select    – 映射查询语句
#{id}这就告诉 MyBatis 创建一个预处理语句参数,通过 JDBC,这样的一个参数在 SQL 中会由一个"?"来标识,并被传递到一个新的预处理语句中,就像这样:
    String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
    PreparedStatement ps = conn.prepareStatement(selectPerson);
    ps.setInt(1,id);

返回类型resultType和resultMap的区别
讲解:https://zhidao.baidu.com/question/1367837349687326659.html
--resultType
resultType是直接表示返回类型的,使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功
如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。
只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
注意:如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身

--resultMap
resultMap则是对外部ResultMap的引用,如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系
column:字段名    property:java变量名

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中key是字段名,value则是其对应的值,resultType 和 resultMap不能同时使用

动态SQL

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
if
<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’ 
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

choose, when, otherwise(类似switch)

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>
where
<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG 
  <where> 
    <if test="state != null">
         state = #{state}
    </if> 
    <if test="title != null">
        AND title like #{title}
    </if>
    <if test="author != null and author.name != null">
        AND author_name like #{author.name}
    </if>
  </where>
</select>
where 元素知道只有在一个以上的if条件有值的情况下才去插入"WHERE"子句。而且,若最后的内容是"AND"或"OR"开头的,where 元素也知道如何将他们去除



-------------------------------------------------------------------


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值