发表于: 2022-06-15 19:50:30
1 562
Dao层,和Service层的概念:
Service是业务层,Dao是数据访问层,这样的分层是基于MVC架构来说的。
Dao层:全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查
Service层:被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。
具体起来,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求;
而Service,则是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。
DAO接口
为每个DAO声明接口的好处在于:
1、可以在尚未实现具体DAO的时候编写上层代码,如Service里对DAO的调用
2、可以为DAO进行多实现,例如有JDBCDAO实现,MyBatisDAO实现,而不需要更改上层代码,只需要简单的在Spring的IoC配置里修改一下注入的DAO实现
Service接口
1、可以在尚未实现具体Service情况下编写上层改代码,如Controller对Service的调用
2、Spring无论是AOP还是事务管理的实现都是基于动态代理的,而动态代理的实现依赖于接口,所以必须有接口的定义才能使用这些功能
3、可以对Service进行多实现
简单来说,整体是一个人,service层是大脑,而dao层则是手和脚,dao层通过service层所传递的信息来完成一系列的动作。
而service接口
Service层一定要有接口吗?那到未必,因为说到底,多一个接口仅仅是扩展性和某些情况下有优势,但是是否会用到接口的便利性,
不确定的情况下我们未必一定要为"可能"买单.只是多写那几行代码,付出一点就可能避免"未来"的大"麻烦",何乐而不为!?
实体类:
public class User implements Serializable {
private int id;
private String name;
private String type;
private String school;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public String setName(String name) {
return this.name = name;
}
public String getType() {
return type;
}
public String setType(String type) {
return this.type = type;
}
public String getSchool() {
return school;
}
public String setSchool(String school) {
return this.school = school;
}
public User() {
}
public User(int id,String name ,String type, String school) {
this.id = id;
this.name = name;
this.type = type;
this.school = school;
}
public User(int id, String name,String school){
this.id = id;
this.name = name;
this.school = school;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", type=" + type +
", school='" + school + '\'' +
'}';
}
}
dao层代码:
public interface UserDao {
//查询所有用户
List<User> showUser(User user);
//按id查询用户
User getUser(int id);
//添加一个用户
boolean addUser(User user);
//修改用户信息
boolean updateUser(User user);
//删除用户
boolean deleteUser(int id);
}
service层
public interface UserService {
///查询所有用户
List<User> showUser(User user);
//按id查询用户
User getUser(int id);
//添加一个用户
boolean addUser(User user);
//修改用户信息
boolean updateUser(User user);
//删除用户
boolean deleteUser(int id);
}
service实现
public class UserServiceImpl implements UserService {
//自动配装
@Autowired
private UserDao userDao;
//查询所有用户
@Override
public List<User> showUser(User user){
return userDao.showUser(user);
}
//按id查询用户
@Override
public User getUser(int id){
return userDao.getUser(id);
}
//添加一个用户
@Override
public boolean addUser(User user){
return userDao.addUser(user);
}
//修改用户信息
@Override
public boolean updateUser(User user){
return userDao.updateUser(user);
}
//删除用户
@Override
public boolean deleteUser(int id){
return userDao.deleteUser(id);
}
}
控制器中定义的一个添加数据接口:
//请求映射地址
@RequestMapping("list2")
//添加用户
//将java对象转为json格式的数据
@ResponseBody
public String addUser(String name,String type,String school){
try {
User user = new User();
user.setName("小龙");
user.setType("师兄");
user.setSchool("修真院");
// User user = new User(1,"小雨","学生","修真院");
// return user.toString();
boolean i = userDao.addUser(user);
// {
// user.setId(2);
// user.setName("小雨");
// user.setType("学生");
// user.setSchool("修真院");
// System.out.println(i);
// }
user.toString();
//返回值转化为json类型
return JSON.toJSONString(user);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}
mybatis.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">
<configuration>
<!-- <!–修改别名–>-->
<!-- <typeAliases>-->
<!-- <typeAlias type="weixiao02.User" alias="User"/>-->
<!-- </typeAliases>-->
<!--配置环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/fc?useSSL=false&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="adbrk"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射器告诉MyBatis到哪里去找映射文件-->
<mapper resource="com_mapper/UserMapper.xml"/>
</mappers>
</configuration>
applicationcontext.xml文件
<!--启用spring的一些annotation -->
<context:component-scan base-package="weixiao02.service"/>
<!--引入数据库配置文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置数据源-->
<!-- 这里用的是dbcp连接池,也可以换成druid、c3p0 -->
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="maxActive" value="10"/>
<property name="maxIdle" value="5"/>
</bean>
<!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--指定Mybatis项目指定的配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--指定数据源-->
<property name="dataSource" ref="dataSource1"/>
</bean>
<!-- 配置mapper扫描,动态实现了mapper接口可以注册到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 要扫描的mapper -->
<property name="basePackage" value="weixiao02.dao"/>
</bean>
<!-- <!–jdbc配置–>-->
<!-- <bean id="UserDao" class="weixiao02.JdbcTemplateTest"/>-->
<!-- <bean id="UserService" class="weixiao02.JdbcTemplateTest"/>-->
<!--系统默认配置的连接池-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="username" value="root"></property>
<property name="password" value="adbrk"></property>
<property name="url" value="jdbc:mysql://localhost:3306/fc"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
mapper映射文件:
<?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 namespace="weixiao02.dao.UserDao">
<!--扫描数据库中的表-->
<!--resultMap元素用来描述如何将结果集映射到 Java 对象-->
<resultMap id="userResult" type="weixiao02.User">
<id property="id" column="id" jdbcType="INTEGER"/>
<!-- property 属性则表示查询出来的字段对应的值赋给实体对象的哪个属性。
column 属性表示从数据库中查询的字段名或别名-->
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="school" column="school"/>
</resultMap>
<!--查询所有用户-->
<select id="showUser" resultType="weixiao02.User">
select * from user
</select>
<!--查询单个用户-->
<select id="getUser" parameterType="int" resultType="weixiao02.User">
select * from user where id = #{id}
</select>
<!--添加用户-->
<insert id="addUser" parameterType="weixiao02.User">
insert into user (name,type,school) values (#{name},#{type},#{school})
</insert>
<!--更新用户信息-->
<update id="updateUser" parameterType="weixiao02.User">
update user set name = #{name},type = #{type} where id = #{id}
</update>
<!--删除用户信息-->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
网页查询
postman中插入数据:
数据库中的数据插入成功:
收获:以上
明天计划:完成接下来的任务
评论