Spring Boot + Shiro + JPA 项目整理

  1. 配置文件 application.properties(页面等资源放在templates中)
    #mysql configure
    spring.datasource.url = jdbc:mysql://localhost:3306/popularfeelings?serverTimezone=GMT&characterEncoding=utf-8
    spring.datasource.username = root
    spring.datasource.password = root
    spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
    spring.jpa.database = MYSQL
    #stripped before adding them to the entity manager
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
    
    # Show or not log for each sql query
    
    spring.jpa.show-sql = true
    
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto = update
    # Naming strategy
    spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
    
    #sqlserver configure
    spring.datasource.url = jdbc:sqlserver://localhost:1433;DatabaseName=test1
    spring.datasource.username = sa
    spring.datasource.password = sa
    spring.datasource.driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.jpa.database = SQLSERVER
    spring.jpa.properties.hibernate.default_schema = dbo
    
    #test1代表数据库名称
    spring.jpa.properties.hibernate.default_catalog= test1
    
    #设置hibernate方言
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.SQLServer2008Dialect
    
    # Show or not log for each sql query
    spring.jpa.show-sql = true
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto = update
    # Naming strategy
    spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
    
    spring.thymeleaf.prefix=classpath:/templates/page/
    spring.thymeleaf.suffix: .html
    spring.mvc.static-path-pattern=/templates/**
    spring.resources.static-locations=classpath:/templates
  2. Shiro配置相关(http://412887952-qq-com.iteye.com/blog/2299777)
    1.shiro config 中的shiroFilterFactoryBean.setLoginUrl("/index"); 配置的是访问链接。拦截后访问此url
    2.页面跳转 http://www.cnblogs.com/zmj1987/p/9262014.html 踩坑:只能使用注解controller 否则返回的是字符串
    3.设置css等文件不拦截  filterChainDefinitionMap.put("/templates/css/**", "anon");//设置不拦截
    4.获取静态资源路径 需设置 spring.mvc.static-path-pattern=/templates/**  
    5.shiro获取当前登录信息
    SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(userInfo,Md5pass,getName()); 设置
    TSUser user = (TSUser) SecurityUtils.getSubject().getPrincipal();  获取
    spring.resources.static-locations=classpath:/templates 
    注意:通过spring.mvc.static-path-pattern这种方式配置,会使Spring Boot的默认配置失效,也就是说,/public /resources 等默认配置不能使用。
    配置中配置了静态模式为/static/,就只能通过/static/来访问。
  3. spring boot 传递参数的方式

    1、@PathVariable
    获取路径参数。即url/{id}这种形式。
    2、@RequestParam
    获取查询参数。即url?name=这种形式
    public void demo(@PathVariable(name = "id") String id, @RequestParam(name = "name") String name) {
        System.out.println("id="+id);
        System.out.println("name="+name);
    }
    3.$.ajax({
                url: "/userLogin?username="+username+"&password="+password,
    后台 
     @RequestMapping(value = "/userLogin",method = RequestMethod.POST)
        public String login(String username,String password){
    4.后台向页面返回值  Exception processing template:
    5. data : JSON.stringify(vm.noticeInfo)
      public R update(@RequestBody NoticeInfoEntity noticeInfo) 
       可以直接使用一个map来接收。
    public R update(@RequestBody Map<String, Object> params)
    
  4. spring boot 热部署

    只需要添加devtools依赖即可
    
    		<!-- spring boot devtools 依赖包. -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-devtools</artifactId>
    			<optional>true</optional>
    			<scope>true</scope>
    		</dependency>
    JVM会定时扫描重新加载且仅加载有改动的类文件(.class文件),而不是加载所有的类文件,大大减少了类加载耗费的时间,从而实现热部署的功能。
    Eclipse默认自动编译,而idea默认手动编译,因此idea需要修改两个参数以达到任意时间自动编译的目的。
    
    首先,File->setting->搜索compiler->将Build project automatically打勾(注意后面only works not running/debugging,所以我们要实现热部署就必须打破这个限制,于是乎有了下面设置)
    
    然后,CTRL+ALT+SHIFT+/ 组合键打开 Maintenance窗口选择Registry... ,找到compiler.automake.allow.when.app.running选项,打勾开启运行时编译功能
  5. SpringBoot项目打war包

    1.pom.xml中的packaging设置成war<packaging>war</packaging>
    
    /**
     * 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
     */
    public class SpringBootStartApplication extends SpringBootServletInitializer {
    
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            // 注意这里要指向原先用main方法执行的Application启动类
            return builder.sources(Application.class);
        }
    }
    
    【注意】:这个新建的类,与springboot的启动类是同级的
    2. <!--声明spring boot内嵌tomcat的作用范围  在运行时不起作用-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
    3.<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    https://blog.csdn.net/Shen_S_H/article/details/79178558
  6. 设置tomcat不加项目名称访问 \conf\server.xml中
    <Context path="" debug="0" docBase="/Demo" reloadable="true" />
    可能会出现 一个tomcat中有两个项目 你的项目和root
    此时需要配置 springboot中的application.propertise中spring.jmx.enabled=false

  7. 遇到的问题

    1.No default constructor for entity
    【解决方法】
    当实体类声明了其他带参构造方法时,需要显式声明不带参构造方法。
    2.SqlServer user附近有语法错误 
    【解决方法】
    @Table(name = "[user]") user 是关键词 尽量不要用作表名,若必须使用可以使用[]解决。
    3.html页面之间跳转 404错误
    【解决方法】
    window.location.href = "signin";
    这个代码的意思是跳转到signin这个请求,SpringBoot会根据Controller中的RequestMapping找到"/signin"请求,然后执行里面的内容
    4.JPA中save方法更新时,如果试题中有的字段未null时,更新原有数据为null。
    【解决方法】
    https://www.cnblogs.com/kongxianghai/p/7575988.html  jpa自定义sql  
    更新
    @Transactional
    @Query(value=“UPDATE xxEntity xe SET xe.data= :date WHERE xe.id= :id”)
    int  update(@Param(“date”)Date date,@Param(“id”)int id);
    5.查询
    @Query("select id,ywnr,gdlsh from Bill where csr_cssj is null and  csr_id =:csr_id")
    public List<Bill> findByCsrId(@Param("csr_id") String id);

猜你喜欢

转载自blog.csdn.net/codeLife1993/article/details/82588935
今日推荐