几种设计模式
工厂模式:创建对象的过程不再使用new,而是交给工厂来完成,降低了类与类之间的依赖关系(解耦),使得每次创建对象的过程不需要重新编译和部署。例如,生产一台电脑,只需要向工厂提货而不需要关注电脑的创造过程。
构建者模式:使用多个简单的对象一步一步构建成一个复杂的对象。
工厂模式关心创造的对象的整体,而构建者模式关注创造对象的过程,由简单的对象开始一步步地构造出复杂的对象。
代理模式:不修改原代码的基础上对原有的方法的功能进行增强。
Mybatis基于注解的开发配置
和基于xml的开发配置不同,在基于注解进行开发配置的时候,xml文件只需要保留主配置文件,其他每个dao独立的xml配置文件都删掉,如下图所示:
在environments标签的后面,对映射配置文件的位置进行配置。映射配置文件指的是每个dao独立的配置文件。class后面填写被注解的dao的全限定类名。
<mappers>
<mapper class="全限定类名"></mapper>
</mappers>
配置文件写好后,在dao接口中的方法上使用@select注解,在注解后面的括号中写sql语句。
配置结束后,即可以使用mybatis执行数据库的相关操作。新建一个测试类,测试mybatis的curd操作。
public static void main (String [] args) throws IOException {
//读取配置文件,生成字节输入流
InputStream is = Resources.getResourceAsStream("sqlconfig.xml");
//获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象
SqlSession sqlSession = factory.openSession();
//获取dao的代理对象
Iuserdao userdao = sqlSession.getMapper(Iuserdao.class);
//执行查询所有方法
List<User> users = userdao.findAll();
for(User user : users){
System.out.println(user);
}
//释放资源
sqlSession.close();
is.close();
}
自定义Mybatis开发的流程
1、使用SqlSessionFactoryBuilder类接收SqlMapConfig.xml文件,构建出SqlSessionFactory对象。
2、SqlSessionFactory读取SqlMapConfig.xml文件当中连接数据库和mapper映射信息,用来生产出真正操作数据库的SqlSession对象。
3、SqlSession对象具有两大作用。①生成接口代理对象,②定义通用的增删改查方法。
①生成接口代理对象。第一步,先用SqlSessionFactory读取到的数据库连接信息创建Connection对象。第二步,通过jdk代理模式创建出代理对象,作为SqlSession对象中的getMapper方法的返回值。这里的主要工作是在创建代理对象时第三个参数处理类里面得到sql语句,执行对应CURD操作。
②定义通用的增删改查方法。首先,用SqlSessionFactory读取的数据库连接信息创建出jdbc的Connection对象。接着,直接得到sql语句,使用jdbc的Connection对象进行对应的CURD操作。
4、封装结果集。对返回的数据库结果集进行封装,变成java对象返回给调用者,因此我们必须知道调用者返回的数据类型。
Mybatis中的增删改查
一、保存用户
1、在进行curd操作之前,新建User类,补全getter和setter方法。
2、在dao接口中新增保存用户的方法,如下图所示:
3、如果是基于xml文件进行配置,在dao的映射配置文件当中增加以下配置:
<mapper namespace ="dao的全限定类名">
<insert id = "方法名" parameter="参数类型的全限定类名">
insert into user(username,address) values(#{username},#{address});
</insert>
</mapper>
4、新建测试类,进行数据库添加操作。
二、更新用户。
1、在dao接口中新增更新用户的方法,如下图所示:
2、如果是基于xml文件进行配置,在dao的映射配置文件当中增加以下配置:
<mapper namespace ="dao的全限定类名">
<insert id = "方法名" parameter="参数类型的全限定类名">
insert into user set username=#{username},address=#{address} where id = #{id};
</insert>
</mapper>
3、进行测试。
三、删除
1、在dao接口中添加删除用户的方法,如下图所示:
2、如果是基于xml文件进行配置,在dao的映射配置文件当中增加以下配置:
<mapper namespace ="dao的全限定类名">
<delete id ="方法名" parameterType="参数类型的全限定类名">
delete from User where id = #{id};
</delete>
</mapper>
四、模糊查询
1、在dao中新增模糊查询的方法,如下图所示:
2、如果是基于xml文件进行配置,在dao的映射配置文件当中增加以下配置:
3、测试:
五、保存操作的细节
新增用户之后,同时还要返回当前用户新增的id值。因为id是通过数据库的自动增长来实现的,所以就相当于我们要将自增长的值返回。xml文件中配置如下:
编写测试的方法,执行:
测试结果: