zoukankan      html  css  js  c++  java
  • 关于json格式字符串解析并用mybatis存入数据库

    园子里面找了很多关于json解析后存入数据库的方法,不是太乱,就是没有写完,我下面的主题代码多是受下面两位的启发,请按顺序查看

     http://www.cnblogs.com/tian830937/p/6364622.html,我沿用了这个例子中的json数据格式,多层嵌套。

    http://blog.csdn.net/baicp3/article/details/46711067,这个例子虽然是反例,但是引出了JsonArray。方便后续开发。

    看完明白上面两个例子后,我们就可以开始了。(注意:没有看懂上面的例子请先看懂,当然,下面的代码复制过去都能用的,最主要是理解)

    1.包,请到http://maven.aliyun.com获取,然后复制到pom.xml中

     

    2.配置mybatis.xml,文件放在resource文件夹下,关于数据库的连接就不多讲,照代码中做就是

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
        xmlns:jee="http://www.springframework.org/schema/jee" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:util="http://www.springframework.org/schema/util"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
        
        <!-- 配置连接mysql -->
        <!-- 已测试 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/(数据库名)?useUnicode=true&amp;characterEncoding=utf8"/><!-- localhost:3307 -->                                                        
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </bean>    
        <!-- 配置MyBatis mapper接口扫描 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <property name="mapperLocations" value="classpath:(mapper文件夹名)/*.xml"/>
        </bean>
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--  <property name="sqlSessionFactory" ref="sqlSessionFactory"/>  -->
        <property name="basePackage" value="(项目dao层的位置,如:xxx.xxx.dao)"/>
    </bean>
    </beans>

    3.设计实体类(实体类是按照要解析的json数据确定的)

    student实体类

    package com.bean;
    
    import java.util.Map;
    
    public class Student {
    	  private int age;//年龄
    	    private String gender;//性别,male/female
    	    private String grades;//班级
    	    private String name;//姓名
    	    private Map<String, Double> score;//各科分数
    	    private String scoreId;
    		private Double weight;//体重
    		
    	    public Student() {	
    			// TODO Auto-generated constructor stub
    		}
    
    		public Student(int age, String gender, String grades, String name, String scoreId, Double weight) {
    			super();
    			this.age = age;
    			this.gender = gender;
    			this.grades = grades;
    			this.name = name;
    			this.weight = weight;
    			this.scoreId=scoreId;
    		}
    	    
    		public String getScoreId() {
    			return scoreId;
    		}
    
    		public void setScoreId(String scoreId) {
    			this.scoreId = scoreId;
    		}
    
    		public Double getWeight() {
    			return weight;
    		}
    		public void setWeight(Double weight) {
    			this.weight = weight;
    		}
    	    public int getAge() {
    	        return age;
    	    }
    	    public void setAge(int age) {
    	        this.age = age;
    	    }
    	    public String getGender() {
    	        return gender;
    	    }
    	    public void setGender(String gender) {
    	        this.gender = gender;
    	    }
    	    public String getGrades() {
    	        return grades;
    	    }
    	    public void setGrades(String grades) {
    	        this.grades = grades;
    	    }
    	    public String getName() {
    	        return name;
    	    }
    	    public void setName(String name) {
    	        this.name = name;
    	    }
    	   
    	    
    		public Map<String, Double> getScore() {
    			return score;
    		}
    		public void setScore(Map<String, Double> score) {
    			this.score = score;
    		}
    		@Override
    		public String toString() {
    			return "Student [age=" + age + ", gender=" + gender + ", grades=" + grades + ", name=" + name + ", score="
    					+ score + ", weight=" + weight + "]";
    		}
    
    
    }
    

    Score实体类

    package com.bean;
    
    
    public class Score {
        private String scoreId;
        private Double Networkprotocol;//网络协议
        private Double javaEE;
        private Double Computerbasis;//计算机基础
        private Double Linuxoperatingsystem;//Linux操作系统
        private Double networksecurity;//网络安全
        private Double SQLdatabase;//Sql数据库
        private Double datastructure;//数据结构
        
        public Score() {
        
            // TODO Auto-generated constructor stub
        }
        
        public Score(String scoreId, Double networkprotocol, Double javaEE, Double computerbasis,
                Double linuxoperatingsystem, Double networksecurity, Double sQLdatabase, Double datastructure) {
            super();
            this.scoreId = scoreId;
            Networkprotocol = networkprotocol;
            this.javaEE = javaEE;
            Computerbasis = computerbasis;
            Linuxoperatingsystem = linuxoperatingsystem;
            this.networksecurity = networksecurity;
            SQLdatabase = sQLdatabase;
            this.datastructure = datastructure;
        }
    
        public String getScoreId() {
            return scoreId;
        }
        public void setScoreId(String scoreId) {
            this.scoreId = scoreId;
        }
        public Double getNetworkprotocol() {
            return Networkprotocol;
        }
        public void setNetworkprotocol(Double networkprotocol) {
            Networkprotocol = networkprotocol;
        }
        public Double getJavaEE() {
            return javaEE;
        }
        public void setJavaEE(Double javaEE) {
            this.javaEE = javaEE;
        }
        public Double getComputerbasis() {
            return Computerbasis;
        }
        public void setComputerbasis(Double computerbasis) {
            Computerbasis = computerbasis;
        }
        public Double getLinuxoperatingsystem() {
            return Linuxoperatingsystem;
        }
        public void setLinuxoperatingsystem(Double linuxoperatingsystem) {
            Linuxoperatingsystem = linuxoperatingsystem;
        }
        public Double getNetworksecurity() {
            return networksecurity;
        }
        public void setNetworksecurity(Double networksecurity) {
            this.networksecurity = networksecurity;
        }
        public Double getSQLdatabase() {
            return SQLdatabase;
        }
        public void setSQLdatabase(Double sQLdatabase) {
            SQLdatabase = sQLdatabase;
        }
        public Double getDatastructure() {
            return datastructure;
        }
        public void setDatastructure(Double datastructure) {
            this.datastructure = datastructure;
        }
        @Override
        public String toString() {
            return "Score [scoreId=" + scoreId + ", Networkprotocol=" + Networkprotocol + ", javaEE=" + javaEE
                    + ", Computerbasis=" + Computerbasis + ", Linuxoperatingsystem=" + Linuxoperatingsystem
                    + ", networksecurity=" + networksecurity + ", SQLdatabase=" + SQLdatabase + ", datastructure="
                    + datastructure + "]";
        }
        
    
    
            
    }

    4.配置dao,建立dao接口

    package company.order.dao;
    
    import com.bean.Score;
    import com.bean.Student;
    
    
    public interface TestDao {
            int addStudent(Student student);
            int addScore(Score score);
    }

    5.设计数据库表结构

    student表结构

    score表结构

    6.配置mapper.xml,注意修改路径

    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    
    <mapper namespace="company.order.dao.TestDao">
        <!--测试将json解析的数据存入到数据库 -->
        <insert id="addStudent"  parameterType="com.bean.Student">
            insert into student(
                        age,
                        gender,
                        grades,
                        name,
                        scoreId,
                        weight                    
            )values(
                        #{age},
                        #{gender},
                        #{grades},
                        #{name},
                        #{scoreId},
                        #{weight}    
            )
        </insert>
        <insert id="addScore"  parameterType="com.bean.Score">
            insert into score(
                        scoreId,
                        Networkprotocol,
                        javaEE,
                        Computerbasis,
                        Linuxoperatingsystem,
                        networksecurity,
                        SQLdatabase,
                        datastructure            
            )values(
                        #{scoreId},
                        #{Networkprotocol},
                        #{javaEE},
                        #{Computerbasis},
                        #{Linuxoperatingsystem},
                        #{networksecurity},
                        #{SQLdatabase},
                        #{datastructure}    
            )
        </insert>
    </mapper>

    7.上面的准备工作就做好了,然后就是核心业务(模拟的是service业务层)

    (1).将json格式字符串解析成想要的数据格式

    (2).将数据封装jsonarray

    (3).遍历jsonArray,将object数据封装为JSONObject

    (4).运用JSONObject.toBean方法,将其封装为实体类对象

    (5).写入数据库

    import java.util.UUID;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import company.order.dao.TestDao;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    public class Domain {
        
        ClassPathXmlApplicationContext ctx;
        @Before
        public void init(){
            ctx=new ClassPathXmlApplicationContext("backstage-mybatis.xml");
        }
        
        /**
         *这个测试的代码相当于service业务层的代码 
         */
        @Test
        public void testJson(){
            
            TestDao dao=ctx. getBean("testDao", TestDao.class);
            String jsonstr = "{"name":"三班","students":[{"age":25,"gender":"female","grades":"三班","name":"露西","score":{"网络协议":98,"JavaEE":92,"计算机基础":93},"weight":51.3},{"age":26,"gender":"male","grades":"三班","name":"杰克","score":{"网络安全":75,"Linux操作系统":81,"计算机基础":92},"weight":66.5},{"age":25,"gender":"female","grades":"三班","name":"莉莉","score":{"网络安全":95,"Linux操作系统":98,"SQL数据库":88,"数据结构":89},"weight":55}]}";
            int strstrat=jsonstr.indexOf("[");
            int endstrat=jsonstr.lastIndexOf("]")+1;
            //将数据分成jsonArray
            String jsonStr=jsonstr.substring(strstrat, endstrat);
            //System.out.println(jsonStr);
            JSONArray jsonArray=new JSONArray();
            jsonArray =JSONArray.fromObject(jsonStr);
            for (Object object : jsonArray) {
                JSONObject jsonObject=JSONObject.fromObject(object);
                Student studentData=(Student) JSONObject.toBean(jsonObject, Student.class);            
                //System.out.println(studentData);
                String ScoreId= UUID.randomUUID().toString();
                //System.out.println(ScoreId);
                studentData.setScoreId(ScoreId);//设计ScoreId方便以后关联查询            
                Student student=new Student(studentData.getAge(), studentData.getGender(), studentData.getGrades(), studentData.getName(), studentData.getScoreId(), studentData.getWeight());
                //System.out.println(student);
                int a=dao.addStudent(student);//将学生信息写入到数据库
                Map<String,Double> Scores= studentData.getScore();
                //遍历Scores,将单个数据存入到数据库
                /*map遍历总结
                 * http://www.cnblogs.com/blest-future/p/4628871.html
                 * */
                Score scoreData=new Score();
                for (Map.Entry<String , Double> entry : Scores.entrySet()) {
                       //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
                                 //entry.getKey() ;entry.getValue(); entry.setValue();
                                 //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
                                 //System.out.println("key= " + entry.getKey() + " and value= "+ entry.getValue());
                                   if(entry.getKey().equals("网络协议")){                                
                                       scoreData.setNetworkprotocol(Double.parseDouble(entry.getValue()+""));
                                 } if(entry.getKey().equals("JavaEE")){
                                     scoreData.setJavaEE(Double.parseDouble(entry.getValue()+""));
                                 } if(entry.getKey().equals("计算机基础")){
                                     scoreData.setComputerbasis(Double.parseDouble(entry.getValue()+""));
                                 } if(entry.getKey().equals("网络安全")){
                                     scoreData.setNetworksecurity(Double.parseDouble(entry.getValue()+""));
                                 } if(entry.getKey().equals("Linux操作系统")){
                                     scoreData.setLinuxoperatingsystem(Double.parseDouble(entry.getValue()+""));
                                 } if(entry.getKey().equals("SQL数据库")){
                                     scoreData.setSQLdatabase(Double.parseDouble(entry.getValue()+""));
                                 } if(entry.getKey().equals("数据结构")){
                                     scoreData.setDatastructure(Double.parseDouble(entry.getValue()+""));
                                 }
                  }
                Score score=new Score(ScoreId, scoreData.getNetworkprotocol(), scoreData.getJavaEE(), scoreData.getComputerbasis(), scoreData.getLinuxoperatingsystem(), scoreData.getNetworksecurity(), scoreData.getSQLdatabase(), scoreData.getDatastructure());
                int b=dao.addScore(score);
                System.out.println("学生:"+a+";成绩:"+b);
            }
            
            //JSONObject jsonObject = JSONObject.fromObject(jsonStr);
            //Grades grades = (Grades) JSONObject.toBean(jsonObject, Grades.class);
            //System.out.println(grades);
            //System.out.println(grades.getName());
            //System.out.println(grades.getStudents());
            
        }
    }

     8.结果:

     

      

  • 相关阅读:
    【POJ 2987】Firing (最小割-最大权闭合子图)
    -网络流经典模型
    【bzoj 3299】 [USACO2011 Open]Corn Maze玉米迷宫(最短路)
    【POJ 3623】 Best Cow Line, Gold (后缀数组)
    题表-各种生成树
    yield 生成器的运行机制
    numpy.random.shuffle(x)的用法
    Softmax回归(Softmax Regression
    softmax 函数
    极大似然估计的朴素理解
  • 原文地址:https://www.cnblogs.com/wx-ym-good/p/7251707.html
Copyright © 2011-2022 走看看