zoukankan      html  css  js  c++  java
  • JavaEE 10.31作业

    码云链接 https://gitee.com/Chuangzw/JavaEE_Learn/tree/master/student-springmvc-maven

    结构

    在这里插入图片描述
    在这里插入图片描述

    自动生成mybatis插件的实现

    Springmvc整合mybatis,需要引入mybatis包,在pom.xml中添加以下依赖包:

     <!--mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <!--mybatis spring整合-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.3</version>
            </dependency>
    

    mybatis-generator插件

    <plugins>
                <!--mybatis-generator插件-->
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <verbose>true</verbose>
                        <overwrite>true</overwrite>
                    </configuration>
                </plugin>
            </plugins>
    

    几个需要注意到的问题

    mybatis-generator自动生成的代码 不能自动添加外键 所以要自己添加

    Mapper.xml中的代码 自动生成的 参数都是bjid 需要改成 bj.ij

    实现增删改查的两种方法

    一是直接在Controller中 建立会话

    //    BjDao bjDao=new BjDao();
    //    Reader reader;
    //    {
    //        try {
    //            reader = Resources.getResourceAsReader("mybatis-config.xml");
    //        } catch (IOException e) {
    //            e.printStackTrace();
    //        }
    //    }
    //
    //    SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
    //    SqlSession session = sessionFactory.openSession();
    

    二是建立SqlSessionFactoryUtil

    package cn.oneseek.student.util;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.InputStream;
    
    public class SqlSessionFactoryUtil {
    
    	private static SqlSessionFactory sqlSessionFactory;
    	
    	private static SqlSessionFactory getSqlSessionFactory(){
    		if(sqlSessionFactory==null){
    			InputStream inputStream=null;
    			try{
    				inputStream= Resources.getResourceAsStream("mybatis-config.xml");
    				sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    			}catch(Exception e){
    				e.printStackTrace();
    			}
    		}
    		return sqlSessionFactory;
    	}
    	
    	public static SqlSession openSession(){
    		return getSqlSessionFactory().openSession();
    	}
    }
    

    然后在Controller中

    	private SqlSession session=SqlSessionFactoryUtil.openSession();
    	private BjMapper bjDao = session.getMapper(BjMapper.class);
    

    其他包

    引入datasource数据源的包,引入了2种方式,但本次项目中,我们使用的是alibaba的Druid DataSource。

    <!-- JDBC连接池 -->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
            <!-- DruidDataSource,本工程的dataSource配置使用的Druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.29</version>
            </dependency>
    

    pom.xml build添加

    <resources>
                <!--表示把java目录下的有关xml文件,properties文件编译/打包的时候放在resource目录下-->
                <resource>
                    <directory>${basedir}/src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
                <resource>
                    <directory>${basedir}/src/main/resources</directory>
                </resource>
            </resources>
    

    添加spring-jdbc

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.0.RELEASE</version>
    </dependency>
    
    

    问题

    出现异常

    	org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring-mvc.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.getEnvironment()Lorg/springframework/core/env/Environment;
    
    

    原因:忘记在mybatis-config.xml中配置

    <typeAliases>
            <typeAlias alias="Bj" type="cn.oneseek.student.entity.Bj"/>
            <typeAlias alias="Student" type="cn.oneseek.student.entity.Student"/>
        </typeAliases>
    
    <mappers>
            <mapper resource="cn/oneseek/student/mapping/BjMapper.xml"/>
            <mapper resource="cn/oneseek/student/mapping/StudentMapper.xml"/>
        </mappers>
    

    Controller 里数据操作的两种方法

    一种是:

    session.selectList("cn.oneseek.student.dao.BjMapper.queryAll");
    

    另一种

    	private SqlSession session=SqlSessionFactoryUtil.openSession();
    	private BjMapper bjDao = session.getMapper(BjMapper.class);
    		List<Bj> bjList = bjDao.queryAll();
    

    原生的mybatis-generator中没有一对一和一对多的关联关系的配置,所以反向生成代码的时候不会产生关联关系

    手动添加一对多关系如下:

    package cn.oneseek.student.entity;
    
    import java.util.List;
    
    public class Bj {
        private Integer id;
    
        private String bjname;
        
        List<Student> students;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getBjname() {
            return bjname;
        }
    
        public void setBjname(String bjname) {
            this.bjname = bjname;
        }
        public List<Student> getStudents() {
            return students;
        }
        public void setStudents(List<Student> students) {
            this.students = students;
        }
        @Override
        public String toString() {
            return "Bj [id=" + id + ", bjname=" + bjname + "]";
        }
    
    }
    
    package cn.oneseek.student.entity;
    
    public class Student {
        private Integer id;
    
        private String sno;
    
        private String sname;
    
        private String sex;
    
    //    private Integer bjid;
        private Bj bj;
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getSno() {
            return sno;
        }
    
        public void setSno(String sno) {
            this.sno = sno;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
    //    public Integer getBjid() {
    //        return bjid;
    //    }
    //
    //    public void setBjid(Integer bjid) {
    //        this.bjid = bjid;
    //    }
    
        public Bj getBj() {
            return bj;
        }
        public void setBj(Bj bj) {
            this.bj = bj;
        }
        @Override
        public String toString() {
            return "Student [id=" + id + ", sno=" + sno + ", sname=" + sname + ", sex=" + sex + ", bj=" + bj + "]";
        }
    }
    

    控制台乱码

    VM options;

    -Dfile.encoding=UTF-8 
    

    问题一:学生列表不显示班级

    出现原因:控制台打印发现bj=null

    [Student [id=1, sno=001, sname=����, sex=��, bj=null]]
    

    未查询到班级

    在Mapper里增加以下代码

    <resultMap type="cn.oneseek.student.entity.Student" id="StudentWithBj">  <association property="bj" column="bjid" select="cn.oneseek.student.dao.BjMapper.selectByPrimaryKey"/></resultMap>
    <select id="queryAllWithBj"  resultMap="StudentWithBj">
        select * from student
      </select>
    

    问题二:增加学生时出错

    原因:自动生成的entity没有bj.id属性

    解决方法:

    在StudentMapper.xml增加

    <insert id="add" parameterType="Student"  >
        insert into student values(null,#{sno},#{sname},#{sex},#{bj.id})
      </insert>
    

    StudentMapping.java

        void add(Student student);
    

    问题三:出现错误

    ### Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'bjid' of 'class cn.oneseek.student.entity.Student' with value '1' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'bjid' in 'class cn.oneseek.student.entity.Student'
    

    原因:

    Student实体没有bjid

  • 相关阅读:
    小白自动化测试指南
    分布式性能测试框架用例方案设想(二)
    高QPS下的固定QPS模型
    测试自动化最佳实践【译】
    moco框架接口命中率统计实践
    基于docker的分布式性能测试框架功能验证(一)
    编写高质量代码:Web前端开发修炼之道(一)
    JavaScript中点操作符和中括号操作符区别
    Vue脚手架生成及配置
    Npm设置淘宝镜像
  • 原文地址:https://www.cnblogs.com/ZCWang/p/12507463.html
Copyright © 2011-2022 走看看