Mybatis-msb课程笔记
关于jdbc的事务问题:
1.trycatch中如果抓到了问题,那么就connection.rollback();
2.针对批量的操作,可以设置回滚点:connection.setSavepoint()可以获取savepoint.每一个批量操作都加一个savepoint。把这个回滚点加入到linkedlist中去就好了。
MyBatis:
1.由于是框架,所以先是配置mybatis的配置文件。
配置文件的作用:
配置数据库的信息:driver,url, user,password之类的。
配置文件和映射文件要关联好。
映射文件:他是sql语句的包装体。
里面主要的作用是:
配置sql语句的输入,还有输出数据。
2.映射文件和接口文件也是要关联好,这里关联的方式就是路径相同,并且名字也是相同的就好了。
id和接口的方法名字一致。
3.实体类
4.可以在类里操作数据库了。
一般情况下mybatis配置文件中必须写的东西有,位置关系如下:
1.加载properties文件
2.接受类的别名设置:
3.url password username driber
4.对mapper的扫描,而且mapper是不需要标注任何的注解的。
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
sqlSession = factory.openSession();
List
这里主要是通过FactoryBuilder的实例。build获取到的配置文件。最后通过sqlSession就可以获取到sql中的数据了。
mybatis查询的三种方式:
Student findById = sqlSession.selectOne("findByIdOne", 1);
List
Map<String, Student> studentMap = sqlSession.selectMap("findMap", "name");
Set
for (String integer : integers) {
System.out.println(studentMap.get(integer));
}
其他的还是老样子,insert,del,update.
关于mybatis,其实也是有两种方式的。
一种是没有接口的。
二种是有接口的
他们之间主要的区别就是:传参问题,主要就是可以传多个引用类型的数据。
主键自增回填功能。
不用接口其实也是可以使用模糊查询的。
如果是传入的是多个参数的话 ,那么需要看情况了。
具体的是这样的:
如果是多个基本数据类型的话:
1-那么就是arg0,arg1
2-param1,param2
3-或者是使用别名@Param
如果是引用数据类型的话。
那么也是一样的,前面是实例.属性名。
1-可以使arg0.属性名
2-可以是param.属性名。
3-也可以是别名@Param别名.属性名
所谓的主键回填自增功能,不过是在标签上加上
useGeneratedKeys="true" keyProperty="deptno">
开启主键自增回填,指定主键是哪一个,然后,在传入映射文件的那个bean就可以查看具体的自增项目。
其实所谓的动态SQL也是对普通sql的一种方法,就是可以减少重复代码的意思。
动态sql的作用:
一,就是节约了代码。
if标签就是判断作用的。
where标签的作用
1.就是如果条件成立,那么就加上where关键字
2.如果第一个条件成立,那么就去掉第一个标签的and关键字。
set标签:
他是修改的作用,也就是如果有值的话,那么就修改,如果没有值,那么就不修改。
作用:
1.添加set关键字
2.头部的,号,可以根据情况去掉。
Trim标签:
MYBATIS中的日志问题:主要是log4j和log4j2
一般的都是添加了依赖,添加上配置文件,配置文件的名字:log4j.properties(log4j)
log4j2.xml(log4j2)
然后就是在需要打印的地方,打印日志就OK了。
在这里由于不是太熟悉,sql语句,重新回头看了sql语句。
mysql笔记已经做好了。
现在是看到了mybatis的逆向工程了。
总结:
1.逆向工程,
创建了pojo
mapper接口
mapper映射文件了。
需要配置好。那个配置文件。
如果是单模块的话,就是一个项目就一个模块的情况下:
在生成代码的文件的那个地方,我们需要编译之后,复制xml文件的编译后路径。
如果是在多个模块的时候,还需要把
上面三个文件的targetProject 也设置为绝对路径。
如果不是多模块,那么就不需要了。
还有一个问题就是:如果生成的mappe文件中只有insert方法的话,那么就是逆向工程的配置文件
table哪里需要设置了,
enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
把这些设置为了true就可以了。
还有一个问题:就是为什么我创建的pojo里没有全参的构造函数呢。(确实是不需要全参的。原因是由于反射需要无参)
还有一个问题就是
如果这里我们设置为了true的话,那么,这个和以前老师讲的一样,看看是怎么做的。
mybatis新发现的问题:
1.bean中的名字,可以不和表中的名字一致。类型都可以不是一致的,只需要个数保持一致就好了
(这仅仅是表示如果这个语句不是查询的时候才是这样的,如果是增删改,那么就可以这样了。)。
但是bean中的属性名字一定要和Mapper中的方法的形参名字一致。
加载mapper文件的几种方式:
如果不是接口的话:
如果是接口:
还有就是直接扫描包了:
这里有一个问题:就是@Param就是为了给mapper接口中的形参的名字和.xml中的名字一致而已。但是这个其实是没有必要的,
或者说必要性很少,就是这个本来就是个形参,没必要再继续这样搞。
还有一个问题就是:一对多,一对一的问题。
其实就是就是一个标签不一样而已。总前提,先是要放入到resultMap这个标签里,
下面是一对一的resultMap标签:
下面是一对多的resultMap的标签:
今天看了一下那个mybatis.其实吧mybatis就是取代了jdbc的一种方式。
首先是加入依赖
其次是加入配置文件
还有就是映射文件
还有就是mapper接口
我们的bean其实就是一个装数据的容器,可以传入参数的容器,也可以作为接受的数据库中的参数的容器。
浙公网安备 33010602011771号