1.加载需要用到的依赖包
在pom.xml文件中添加相关的依赖文件,mysql-connector-java(数据库连接文件JDBC),lombok(小辣椒插件依赖),junit(单元测试依赖),log4j(日志文件依赖)
2.添加mybatis的配置文件
在文件夹resources中创建mybatis的配置文件
这里是配置文件 只需要粘贴复制就行 不需要会背
<?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"> <configuration> <typeAliases> <!--这里的作用就是起别名,就是再使用com.qjp.entity.user时可以直接写user--> <package name="com.qjp.entity"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!--数据源的配置:name的值固定 value的值要根据客户自己修改--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/userMapper.xml"></mapper> </mappers> </configuration>
3.添加映射文件
在resources文件中创建文件mapper(必须是这个名字)然后创建各个表的映射文件
User表的映射文件是userMapper.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"> <!--namespace:命名空间 可以随便起名,但是后期我们要求命名空间的值必须和所对应的dao相同 这里是mybatis的映射 --> <mapper namespace="qy151.qjp"> <select id="select" parameterType="int" resultType="User"> select * from t_user where userid=#{id}; </select> <select id="selectAll" resultType="User"> select * from t_user ; </select> </mapper>
4.创建并注册映射
在写好映射文件后,需要在maybatis.xml文件中注册一下
5.创建实体类
其中@符号依赖于lombok;
6.编写映射
7.测试mybatis
8.优化mybatis
起别名优化 在mybatis.xml文件中进行书写 一定要放在最前边 不然会报错
日志优化
名字必须是log4j后缀也必须是这个
配置文件内容
log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
9.企业开发模式
在企业中开发时 ,需要创建一个com.qjp.dao 这里存放数据访问层(dao)的接口 然后映射文件中的命名空间名字要和这里的名字一样。
Dao层都改变成接口
使用方法
传递多个参数的方法
添加时返回添加的主键属性
10.列名和属性名不一致的解决办法
解决办法一、
在使用SQL时为每一列都起一个别名 使用 as 属性名 或者在列名的后边空格接属性名
select stu_name as name from student;
select stu_name name from student;
解决办法二、
11.动态sql
应用场景,京东商城的搜索栏,只是一条sql,只不过是动态的sql ,即这条sql会根据你勾选的内容进行改变。
代码一,
代码二、
代码三、
12.set标签
这个配合if标签一起用,一般用在修改语句。如果传递的参数值为null,那么应该不修改该列的值。
13foreach标签
即循环标签
在查询多个人员信息的时候使用
删除多个人员的时候使用
添加多个人员的时候使用
13sql片段
使用方法
14mybatis映射文件处理特殊字符.
第一种:转义标签 <
第二种: <![CDATA[sql]]>
15mybatis完成模糊查询
sql拼接
使用${}不推荐使用,因为不能防止sql注入
16联表查询
<resultMap id="StuAndDyn" type="com.qjp.entity.Student">
<id column="stu_id" property="id"/>
<result column="stu_name" property="name"/>
<result column="password" property="password"/>
<result column="stu_sex" property="sex"/>
<result column="cid" property="cid"/>
<association property="dynasty" javaType="com.qjp.entity.Dynasty">
<id column="cid" property="cid"/>
<result column="cname" property="cname"/>
</association>
</resultMap>
<select id="selectStuAndDyn" resultMap="StuAndDyn">
select * from student s join dynasty d on s.cid=d.cid where stu_id=#{id};
</select>
17.分页插件
导入依赖包
添加拦截
使用pagehelper.startPage
运行结果
18.mybatis generator代码生成器
导入依赖包
配置genrerator
<?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>
<!--location 就是jdbc驱动的本地位置-->
<classPathEntry location="F:\maven\repository\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--关闭注释-->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- jdbc的配置-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai"
userId="root"
password="123456">
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--targetPackage:路径名 也就是建包 targetProject 表示文件所在目录 实体类配置 -->
<javaModelGenerator targetPackage="com.qjp.entity" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--创建映射文件 映射文件配置-->
<sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--数据访问层配置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.qjp.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table schema="mybatis" tableName="student" domainObjectName="Student" enableCountByExample="false"
enableSelectByExample="false" enableUpdateByExample="false" enableDeleteByExample="false">
</table>
<table schema="mybatis" tableName="dynasty" domainObjectName="Dynastys" enableCountByExample="false"
enableSelectByExample="false" enableUpdateByExample="false" enableDeleteByExample="false">
</table>
</context>
</generatorConfiguration>
运行generator的配置
public void jh() throws InvalidConfigurationException, IOException, XMLParserException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("generator.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
生成结果
19使用缓存减少和数据库的交互次数,提高执行效率。
适合放入缓存:经常查询并且不经常改变的;数据的正确与否对最终结果影响不大的;
不适合放入缓存:经常改变的数据;数据的正确与否对最终结果影响很大的;---数据安全性要求不高。例如:商品的库存,银行的汇率,股市的牌价;
mybatis支持两种缓存
(1)一级缓存----基于SqlSession级别的缓存。默认一级缓存是开启的,不能关闭。
(2)二级缓存--基于SqlSessionFactory级别的缓存,它可以做到多个SqlSession共享数据。默认它是关闭。需要手动开启。
开启二级缓存