您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~
前面已经把需要的环境准备好了,包括数据库和SQL语句,现在再来写代码。至于安装MySQL什么的就跳过去了,娘度子里面一大把。
先做一点声明:因为考虑到有些初学Java的工程师可能并不太熟悉MyBatis,而且MyBatis也并非能完全代替SQL,所以在接下来的所有业务代码中,会以JDBC为主。这么做也很好理解:会MyBatis的很大可能也会JDBC,但会JDBC的就不一定会MyBatis了。而且MyBatis用多了,写SQL能力可能会退化,这其实不好。当然,以上纯属个人意见,不喜可喷,欢迎来喷。
先创建一个专门用来操作数据库的Dao类,就叫MySQLDao吧:
/**
* MySQLDao
*
* @author 湘王
*/
@Component
public class MySQLDao<T> {
@Autowired
private JdbcTemplate jdbcTemplate;
// 创建数据
public int create(final String sql, final @Nullable Object... args) throws Exception {
try {
if (1 <= jdbcTemplate.update(sql, args)) {
return 0;
}
return -1;
} catch (DuplicateKeyException e) {
e.printStackTrace();
throw new DuplicateKeyException("data duplicate exception");
} catch (DataAccessException e) {
e.printStackTrace();
throw new RuntimeException("create data exception");
}
}
// 查询数量
public Integer count(final String sql, final Object[] args) {
try {
return jdbcTemplate.queryForObject(sql, args, Integer.class);
} catch (DataAccessException e) {
e.printStackTrace();
}
return null;
}
// 查询单条数据
public Object findOne(final String sql, final RowMapper<?> rowMapper, final @Nullable Object... args) {
try {
List<?> list = jdbcTemplate.query(sql, rowMapper, args);
if (null != list && list.size() > 0) {
return list.get(0);
}
} catch (DataAccessException e) {
e.printStackTrace();
}
return null;
}
// 获得列表
public List<?> find(final String sql, final RowMapper<?> rowMapper, final @Nullable Object... args) {
try {
List<?> list = jdbcTemplate.query(sql, rowMapper, args);
if (null != list && 0 != list.size()) {
return list;
}
} catch (DataAccessException e) {
e.printStackTrace();
}
return null;
}
// 更新或删除数据
public boolean update(final String sql, final @Nullable Object... args) throws Exception {
try {
return 0 <= jdbcTemplate.update(sql, args);
} catch (DataAccessException e) {
e.printStackTrace();
throw new RuntimeException("update or remove object exception");
}
}
}
接着创建实体类Entity(以SysUser为例):
/**
* 用户entity
*
* @author 湘王
*/
public class SysUser implements Serializable, RowMapper<SysUser> {
private static final long serialVersionUID = -1214743110268373599L;
private int id;
private String username;
private String password;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
protected Date createtime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
protected Date updatetime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@JsonIgnore
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public Date getUpdatetime() {
return updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
@Override
public SysUser mapRow(ResultSet result, int i) throws SQLException {
SysUser user = new SysUser();
user.setId(result.getInt("id"));
user.setUsername(result.getString("username"));
user.setPassword(result.getString("password"));
user.setCreatetime(result.getTimestamp("createtime"));
user.setUpdatetime(result.getTimestamp("updatetime"));
return user;
}
}
接着创建SysRole和SysUserRole,与SysUser类似:
/**
* 角色entity
*
* @author 湘王
*/
public class SysRole implements Serializable, RowMapper<SysRole> {
private static final long serialVersionUID = 6980192718775578676L;
private int id;
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
protected Date createtime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
protected Date updatetime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public Date getUpdatetime() {
return updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
@Override
public SysRole mapRow(ResultSet result, int i) throws SQLException {
SysRole role = new SysRole();
role.setId(result.getInt("id"));
role.setName(result.getString("name"));
role.setCreatetime(result.getTimestamp("createtime"));
role.setUpdatetime(result.getTimestamp("updatetime"));
return role;
}
}
/**
* 用户角色entity
*
* @author 湘王
*/
public class SysUserRole implements Serializable, RowMapper<SysUserRole> {
private static final long serialVersionUID = 9171155241328712313L;
private int userid;
private int roleid;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createtime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updatetime;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public int getRoleid() {
return roleid;
}
public void setRoleid(int roleid) {
this.roleid = roleid;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public Date getUpdatetime() {
return updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
@Override
public SysUserRole mapRow(ResultSet result, int i) throws SQLException {
SysUserRole userRole = new SysUserRole();
userRole.setUserid(result.getInt("userid"));
userRole.setRoleid(result.getInt("roleid"));
userRole.setCreatetime(result.getTimestamp("createtime"));
userRole.setUpdatetime(result.getTimestamp("updatetime"));
return userRole;
}
}
接着创建Service:
/**
* 用户Service
*
* @author 湘王
*/
@Service
public class UserService {
@Autowired
private MySQLDao mySQLDao;
public Integer count() {
String sql = "SELECT COUNT(id) FROM sys_user;";
return mySQLDao.count(sql, new Object[] {});
}
public int save(String username, String password) throws Exception {
String sql = "INSERT INTO sys_user(username, password) VALUES (?, ?);";
return mySQLDao.create(sql, username, password);
}
public SysUser getById(int id) {
String sql = "SELECT id, username, password, createtime, updatetime FROM sys_user WHERE id = ?";
return (SysUser) mySQLDao.findOne(sql, new SysUser(), id);
}
public SysUser getByName(String username) {
String sql = "SELECT id, username, password, createtime, updatetime FROM sys_user WHERE username = ?";
return (SysUser) mySQLDao.findOne(sql, new SysUser(), username);
}
public List<SysUser> getAll() {
String sql = "SELECT id, username, password, createtime, updatetime FROM sys_user";
return mySQLDao.find(sql, new SysUser());
}
}
/**
* 角色Service
*
* @author 湘王
*/
@Service
public class RoleService {
@Autowired
private MySQLDao roleDao;
public void save(String name) throws Exception {
String sql = "INSERT INTO sys_role(name) VALUES (?);";
roleDao.create(sql, name);
}
public SysRole getById(int id) {
String sql = "SELECT id, name, createtime, updatetime FROM sys_role WHERE id = ?";
return (SysRole) roleDao.findOne(sql, new SysRole(), id);
}
public SysRole getByName(String name) {
String sql = "SELECT id, name, createtime, updatetime FROM sys_role WHERE name = ?";
return (SysRole) roleDao.findOne(sql, new SysRole(), name);
}
public List<SysRole> getAll() {
String sql = "SELECT id, name, createtime, updatetime FROM sys_role";
return roleDao.find(sql, new SysRole());
}
public List<SysRole> getByUserId(int userid) {
String sql = "SELECT r.id, r.name, r.createtime, r.updatetime " +
"FROM sys_role AS r, sys_user_role AS ur, sys_user AS u " +
"WHERE u.id = ? AND u.id = ur.userid AND ur.roleid = r.id";
return (List<SysRole>) roleDao.findOne(sql, new SysRole(), userid);
}
}
/**
* 用户角色Service
*
* @author 湘王
*/
@Service
public class UserRoleService {
@Autowired
private MySQLDao mySQLDao;
public void save(int userid, int roleid) throws Exception {
String sql = "INSERT INTO sys_user_role(userid, roleid) VALUES (?, ?);";
mySQLDao.create(sql, userid, roleid);
}
public List<SysUserRole> getByUserId(int userid) {
String sql = "SELECT userid, roleid, createtime, updatetime FROM sys_user_role WHERE userid = ?";
return mySQLDao.find(sql, new SysUserRole(), userid);
}
public List<SysUserRole> getByRoleId(int roleid) {
String sql = "SELECT userid, roleid, createtime, updatetime FROM sys_user_role WHERE roleid = ?";
return mySQLDao.find(sql, new SysUserRole(), roleid);
}
public SysUserRole getById(int userid, int roleid) {
String sql = "SELECT userid, roleid, createtime, updatetime FROM sys_user_role WHERE userid = ? AND roleid = ?";
return (SysUserRole) mySQLDao.findOne(sql, new SysUserRole(), userid, roleid);
}
}
最后创建一个LoginController:
/**
* 登录Controller
*
* @author 湘王
*/
@RestController
public class LoginController {
@GetMapping("/")
public String index() {
final String username = SecurityContextHolder.getContext().getAuthentication().getName();
System.out.println("当前登录用户:" + username);
return "SUCCESS";
}
// 登录
@PostMapping("/login")
public String login(String username, String password) {
System.out.println("当前登录用户:" + username);
return "SUCCESS";
}
// 登出
@GetMapping("/logout")
public String logout(String username) {
System.out.println("登出用户:" + username);
return "SUCCESS";
}
}
启动应用:
/**
* 应用入口
*
* @author 湘王
*/
@SpringBootApplication
public class RBACApplication {
public static void main(String[] args) {
SpringApplication.run(RBACApplication.class);
}
}
用postman(或其他工具,如apipost)或者IDE工具接口对接口进行进行测试:
却发现它什么都没显示?
对,没有任何显示是正常的,因为还有很重要的内容没有写呢。
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~