Javaweb学习笔记(二)
Javaweb学习笔记(二)
何平安本文章的图片由于是天香园1.0的但是过期了图片就查看不了,就当我自己的一个纪念了吧~
—Mybatis—
一款持久层框架,简化JDBC。
认识使用Mybatis查询mysql数据库中的表的信息:
创建MyBatis工程:IDEA创建sping工程,在SQL中选择Mybatis Framwork和Mysql Driver。连接数据库,再在main软件包下新建一个类,我的类名叫User,里面编写查询的表的所有数据的变量名,例如我要查询hh数据库中的student表,内容有:
我就需要定义如下的代码:
1 | private String name; |
当然还要创建getter,setter,toString和构造函数。然后在Mybatis自动创建的main下的resoures下的application.properties里编写下面的代码:
1 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver |
这样就不用写JDBC里面那一大堆连接代码了。然后再在main里面创建一个接口:mapper.UserMapper(会自动创建一个包名),这就相当于三层类里面的Dao类,当做一个容器代理实现类对象,里面编写:
1 | @Mapper//运行时自动生成该接口的实现类对象(代理对象)。并且将该对象交给IOC容器管理 |
这里有个技巧可以选中mysql语句右键显示上下文再选择添加/编辑注入语言,然后选择Mysql,就可以提示编写MySQL的语法了。里面然后打开test包里自动创建的那个类,里面编写
1 | @SpringBootTest//springboot整合单元测试的注解 |
运行此类就可以看到student表的数据以集合形式展示啦~
数据库连接池:
跟线程池差不多的东西,因为有很多用户访问数据库,所以就直接创建一个池来提高性能,而且还可以让长时间不访问数据库的用户的连接断开,腾出空间来。
spring默认的数据库连接池:hikari
或者切换阿里巴巴的Druid数据库连接池:先下载jar然后添加到项目中Maven Repository: com.alibaba » druid » 1.2.8 (mvnrepository.com),然后在pom.xml中添加下面的代码:
1 | <dependency> |
lombok工具包:不用写什么setter,getter,toString,equle,hashCode啥的,直接一个@Data注解搞定,另外无参有参分别为:@NoArgsConstructor,@AllArgsConstructor
下载jar:Maven Repository: org.projectlombok » lombok » 1.18.24 (mvnrepository.com),然后导入项目并在pom.xml输入(不用写 version,springboot 会自动管理)
1 | <dependency> |
—Mybatis基础操作—
使用Mybatis对数据库进行增删改操作:eg:在main下自动生成的包下创建Mapper.EmpMapper(这只是我的名字)的接口类,此接口添加@Mapper注解,创建一个方法用作于增/删/改,并且添加上注解,增删改的注解分别为@Insert,@Delect,@Update,在注解旁边的括号输入要运行的Mysql语句,建议使用预编译SQL,需要把参数的值改为#{XXX}(另一种时${xxx},这种就是直接拼接在MySQL语句上了,而非前面的#是引入参数)的样子,相当于以前写JDBC的”?”,然后再在方法里定义对应类型的参数。再在test测试类里面定义一个私有的EmpMapper引用数据类型的变量,并添加上@Autowired的注解,然后创建一个方法再调用EmpMapper里面的增删改方法:empmapper.delect(之前定义的参数)。
如果预编译里面的参数过多,比如增加,可以创建一个Emp(也是我自己取的)类用于定义里面的变量,然后再在增加方法的参数直接创建这个类的变量。注意创建的变量名要和#{XXX}里的一样。查询的话就直接搞个集合来输出吧,因为有可能有多个结果。
Emp类:
1 | @Data |
Mapper接口类里:
1 | @Insert("INSERT INTO mybatis.emp(name, gender, enterday, image, create_time, update_time) " + |
test类:
1 | @Test |
XML映射文件
XML映射文件名称要与Mapper接口名一样,并且将XML文件和Mapper接口放置在相同包下(同包同名),在resources下创建三个文件夹就行了,创建目录直接输入com/example/mapper就行了。新建的XML文件输入:(可以在mybatis中文网查看:入门_MyBatis中文网)
1 | <?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"><mapper></mapper> |
namespace与Mapper接口全限定名(文件路径)一致,我的是top.hepingan.mapper.EmpMapper;
例如我要执行select查询语句我就需要在
1 | <select id="list" resultMap="com.example.pojo.Emp"> |
id与Mapper接口中的方法名一致,并保持返回类型一致,resultMap就是单条记录锁封装的类型,比如我Empmapper里面有个方法为public List
—动态SQL—
如果搜索时只输入了一个条件,但是SQL语句本身有多个查询条件,其他的查询条件就会为空,就会出错,这时就要用到if标签。
结构:<if test=”name !=null”>name like concat(‘%’,’#{name},’%’) ,意思就是如果name输入的参数值为空就没有标签里面的语句。
eg:用name,gender,enterday三个参数查询emp中的数据。这里的where也要用标签是为了防止三条数据都为null或第一条数据为null导致where,and多余。而where标签就可以自动除掉该隐患。
1 | <select id="select"> |
collection:遍历的集合或数组
item:遍历出来的每个元素(名字随便)
separator:分隔符
open:起始符
close:结束符