springboot项目基本结构

tech2025-05-06  5

项目结构

SpringbootApplication

与springboot包同级,主程序类

这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

@MapperScan("com.ly.springboot.mapper") @SpringBootApplication public class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); } }

配置文件

pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.ly</groupId> <artifactId>springboot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot</name> <description>Demo project for Spring Boot</description> <repositories> <repository> <!-- 创建私服地址 --> <id>aliyun</id> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--freemarker的依赖包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!--jdbc的依赖包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--thymeleaf的依赖包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!--mysql的依赖包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--测试单元的依赖包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>test</scope> </dependency> <!--阿里Druid数据源引入项目即可--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> </dependency> <!--配置文件执行器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

application.yml

jdbc: username: root password: 123456 url: jdbc:mysql://localhost:3306/test driverClassName: com.mysql.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.ly.springboot.domain spring: freemarker: allow-request-override: false allow-session-override: false cache: false charset: UTF-8 check-template-location: true content-type: text/html enabled: true expose-request-attributes: false expose-session-attributes: false expose-spring-macro-helpers: true prefer-file-system-access: true suffix: .ftl template-loader-path: classpath:/templates/ settings: classic_compatible: true default_encoding: UTF-8 template_update_delay: 0

config包

配置信息类(config)

JdbcConfig

@Configuration public class JdbcConfig { @Bean @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource(){ // DruidDataSource dataSource = new DruidDataSource(); // return dataSource; return new DruidDataSource(); } }

mapper包

数据接口访问层(Dao)

IUserMapper接口

@Mapper public interface IUserMapper { public List<Map<String,Object>> selectUserList(); // public int insertUser(User user); public int insertUser(Map<String,Object> map); public int updateUser(Map<String,Object> map); //根据用户ID查找这个对象 public Map<String,Object> selectUserById(int userId); public int deleteUser(List<String> list); }

service包

IUserService接口

数据服务层(Service)

public interface IUserService { public List<Map<String,Object>> selectUserList(); // public int insertUser(User user); // public int insertUser(Map<String,Object> map); // // public int updateUser(Map<String,Object> map); //根据用户ID查找这个对象 public Map<String,Object> selectUserById(int userId); public int insertOrUpdateUser(Map<String,Object> map); public int deleteUser(List<String> list); }

UserServiceImpl实现类

数据服务的实现接口(serviceImpl)

service.impl目录下实现IUserService接口

@Service public class UserServiceImpl implements IUserService { @Autowired private IUserMapper userMapper; @Override public List<Map<String,Object>> selectUserList() { return userMapper.selectUserList(); } // @Override // public int insertUser(Map<String, Object> map) { // return userMapper.insertUser(map); // } // // @Override // public int updateUser(Map<String, Object> map) { // return userMapper.updateUser(map); // } @Override public Map<String, Object> selectUserById(int userId) { return userMapper.selectUserById(userId); } // @Override // public int insertUser(User user) { // return userMapper.insertUser(user); // } @Override public int insertOrUpdateUser(Map<String, Object> map) { //这里做逻辑判断 //System.out.println("map"+map); int count=0; if(map.get("userId")==null||map.get("userId").toString().equals("")){ count=userMapper.insertUser(map); }else{ count=userMapper.updateUser(map); } return count; } @Override public int deleteUser(List<String> list) { return userMapper.deleteUser(list); } }

controller包

前端控制器(Controller)

UserController

@Controller @Slf4j public class UserController extends BaseController { @Autowired private IUserService userService; // @RequestMapping("/index") // public String index(HttpServletRequest request){ System.out.println(userService.selectUserList()); // request.setAttribute("list",userService.selectUserList()); // return "index"; // } //modeandview方式 @RequestMapping("/index") public ModelAndView index(){ // System.out.println(userService.selectUserList()); Map<String,Object> map =new HashMap<String, Object>(); map.put("list",userService.selectUserList()); return new ModelAndView("index", map); } //实体类的插入or更新操作 @GetMapping("/insertOrupdateUser") public String insertOrupdateUser(){ return "insertOrupdateUser"; } // @PostMapping("/insertOrupdateUser") // //老版 // //@RequestMapping(value = "/insertOrupdateUser",method = RequestMethod.POST) // public String insertOrupdateUser1(User user){ // //真正意义的插入 // log.info(user.getUserName()); // return "redirect:/index"; // } @PostMapping("/insertOrupdateUser") //老版 //@RequestMapping(value = "/insertOrupdateUser",method = RequestMethod.POST) public String insertOrupdateUser1(@RequestParam Map<String,Object> map){ //真正意义的插入 int count=userService.insertOrUpdateUser(map); log.info("count" + count); log.info("map" + map); return "redirect:/index"; } @GetMapping("/selectUserById") //@RequestMapping(value = "/insertOrUpdateUser",method = RequestMethod.POST) public ModelAndView selectUserById(@RequestParam int userId){ return new ModelAndView("insertOrUpdateUser",userService.selectUserById(userId)); } @GetMapping("/deleteUser") //@RequestMapping(value = "/insertOrUpdateUser",method = RequestMethod.POST) public String deleteUser(@RequestParam String ids){ // List<String> list = new ArrayList<String>(); // list.add("1"); // list.add("2"); // int count = userService.deleteUser(list); // log.info(ids); int count = userService.deleteUser(getParamData(ids)); return "redirect:/index"; } }

resources.mapper

mybatis映射文件

UserMapper.xml

<?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="com.ly.springboot.mapper.IUserMapper"> <select id="selectUserList" resultType="map"> select user_id as userId,user_name as userName,user_password as userPassword from tb_user order by user_id desc; </select> <select id="selectUserById" resultType="map" parameterType="int"> select user_id as userId,user_name as userName,user_password as userPassword from tb_user where user_id=#{userId} order by user_id desc; </select> <insert id="insertUser" parameterType="map" keyProperty="user_id" useGeneratedKeys="true"> insert into tb_user (user_name,user_password) values(#{userName},#{userPassword}); </insert> <update id="updateUser" parameterType="map"> update tb_user <trim prefix="set" suffixOverrides=","> <if test="userPassword != null and userPassword!= ''">user_password = #{userPassword},</if> </trim> where user_id = #{userId}; </update> <delete id="deleteUser" parameterType="java.util.List"> delete from tb_user where user_id in <foreach collection="list" open="(" close=")" separator="," item="item" > #{item} </foreach> </delete> </mapper>

resources.templates

存放Web页面的模板文件

index.ftl

主页

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Index</title> <script> //全选和非全选 function chooseAll(){ //取checkbox的第一个元素节点的状态 var box = document.getElementsByName("ids"); if(box[0].checked){ for (var i = 0; i < box.length; i++) { box[i].checked = true; } //开启删除按钮 document.getElementById("btn").disabled = ""; }else { for (var i = 0; i < box.length; i++) { box[i].checked = false; } //关闭删除按钮 document.getElementById("btn").disabled = "disabled"; } } function chooseOne() { var box = document.getElementsByName("ids"); var result = false; for (var i = 1; i < box.length; i++) { if(box[i].checked == false){ result = true; break; } } if(result){ box[0].checked = false; //关闭删除按钮 //document.getElementById("btn").disabled = "disabled"; }else{ box[0].checked = true; //开启删除按钮 //document.getElementById("btn").disabled = ""; } //判断是否开始删除按钮 var temp = false; for(var i = 1; i < box.length; i++){ if(box[i].checked){ temp = true; break; } } if(temp){ document.getElementById("btn").disabled=""; }else{ document.getElementById("btn").disabled="disabled"; } } //执行删除的方法,通过confirm询问框 function del(){ var box=document.getElementsByName("ids"); var ids=""; for(var i=1;i<box.length;i++){ if(box[i].checked){ ids+=box[i].value+","; } } if(confirm('你确定要删除id是'+ids+'的数据吗?')){ alert('执行删除'); location.href='deleteUser?ids='+ids; }else{ alert('您取消了删除的操作!'); } } </script> </head> <body> <#if list?? && (list?size > 0) > <table> <tr> <td><input type="checkbox" name="ids" onclick="chooseAll();"></td> <td>序列号</td> <td>userId</td> <td>userName</td> <td>userPassword</td> <td>操作</td> </tr> <#list list as item> <tr> <td><input type="checkbox" name="ids" value="${item.userId}" onclick="chooseOne();"></td> <td>${item_index+1}</td> <td>${item.userId}</td> <td>${item.userName}</td> <td>${item.userPassword}</td> <td><a href="selectUserById?userId=${item.userId}">修改</a></td> </tr> </#list> <tr> <td><a href="insertOrUpdateUser">点击我新增数据</a></td> <td><input type="button" value="删除" id="btn" disabled="disabled" onclick="del();"></td> </tr> </table> <#else> 暂无数据 </#if> </body> </html>

insertOrupdateUser.ftl

增加或修改页面

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>insertOrupdate</title> <script> // console.log('#{userId}'); // console.log('<%=userId%>'); window.onload = function(){ var userId = document.getElementById("userId").value.trim(); if(userId == '' || userId ==null){ document.getElementById("userName").disabled = ""; }else{ document.getElementById("userName").disabled = "disabled"; } } </script> </head> <body> 增加数据 <!--readonly = "readonly" && disabled ="disabled"--> <form action="insertOrupdateUser" method="post"> <input type="hidden" name="userId" id="userId" value="${userId}"> <p>userName<input type="text" id="userName" name="userName" value="${userName}"></p> <p>userPassword<input type="text" id="userPassword" name="userPassword" value="${userPassword}"></p> <p><input type="submit"></p> </form> </body> </html>
最新回复(0)