头两天考驾照去了,今天继续
今天要开始做java后台了,网上大概看了一下资料,基本心里有个数了。前面说了,按接口的方式分层,这块分为:dao->entity->service三层,由service对外提供服务,结构如下:
在dao层和service层都使用了接口,并使用了一个父接口。父接口的目的是可以定义一些公共的服务内容接口,这样子接口只需要定义增加的部分。
当然,有了父接口,则必须要考虑子接口如何进行类型转换。这后后面再来讲,这里主要是记录一下自己一步一步的学习历程。
因本章还没有涉及到类型转换,因此接口都只是定义是的空的。
先是dao层
BaseDao.java
package mybatistest.dao;
public interface BaseDao {
}
UserDao.java
package mybatistest.dao;
import mybatistest.entity.User;
public interface UserDao extends BaseDao{
public User getByID(String id);
}
UserDaoImpl.java
package mybatistest.dao.impl;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import mybatistest.dao.UserDao;
import mybatistest.entity.User;
public class UserDaoImpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl() {
String resource = "mybatis-configuration.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public User getByID(String id) {
return sqlSessionFactory.openSession().selectOne(
"mybatistest.mapper.User.getByID",id);
}
}
再是Service层
BaseService.java
package mybatistest.service;
public interface BaseService {
}
UserService.java
package mybatistest.service;
import mybatistest.entity.User;
public interface UserService extends BaseService{
public User getByID(String id);
public String userLogin(String userNumber, String userPassword);
}
UserServiceImpl.java
package mybatistest.service.impl;
import mybatistest.dao.UserDao;
import mybatistest.dao.impl.UserDaoImpl;
import mybatistest.entity.User;
import mybatistest.service.UserService;
public class UserServiceImpl implements UserService{
//这里定义的是按口
private UserDao userDao;
public UserServiceImpl(){
userDao = new UserDaoImpl();
}
public User getByID(String id) {
return userDao.getByID(id);
}
public String userLogin(String userNumber, String userPassword) {
User user;
user = userDao.getByID("1");
if (null == user){
return "用户不存在!";
}
if ("XXX" != userPassword){
return "密码不正确!";
}
return "登录成功!";
}
}
当然,这里的userLogin只是个简单的示例而已。
OK,这时,Test.java可以改成这种样子了
package mybatistest;
import mybatistest.entity.User;
import mybatistest.service.UserService;
import mybatistest.service.impl.UserServiceImpl;
public class Test {
public static void main(String[] args) {
//注意定义成接口
UserService userService = new UserServiceImpl();
//测试从接口中的服务取一个entity
User user = userService.getByID("1");
System.out.println(user.getDescription());
//测试调接口的userLogin服务
System.out.println(userService.userLogin("1", "XXX"));
}
}
到这里,整个后端结构性的内容就有了。下步:
1、使用泛型,将接口和实现类的公共部分提到父类,封装代码,减少代码量;
2、使用SpringMVC,实现实现类的注入;