发表于: 2022-06-15 19:50:30

1 258



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>

<!--    &lt;!&ndash;修改别名&ndash;&gt;-->
<!--    <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&amp;useUnicode=true&amp;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连接池,也可以换成druidc3p0  -->
   <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>


<!--    &lt;!&ndash;jdbc配置&ndash;&gt;-->
<!--    <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中插入数据:



数据库中的数据插入成功:








收获:以上


明天计划:完成接下来的任务












返回列表 返回列表
评论

    分享到