3、最后成品

前端公共插件

components/QueryPop

    <template>
        <div id="querypop">
            <div class="left">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                {{props.title}}:
                <input
                    type="text" v-model="state.idNumber" />
                <input type="button" value="查询" @click="selectPerson()" />
                <!-- showpop是否显示同户查询,只有修改时showpop=0-->
                <input type="button" value="同户查询" @click="selectPersonAll()" v-show="props.showpop!=0"/>
            </div>
            <table width="100%" border="1" cellspacing="0" cellpadding="0" align="center" bordercolor="#dadada">
                <tr align="center" >
                    <th width="15%" height="25" valign="middle">户口类别</th>
                    <th width="10%" height="25" valign="middle">户号</th>
                    <th width="10%" height="25" valign="middle">关系</th>
                    <th width="10%" height="25" valign="middle">姓名</th>
                    <th width="5%" height="25" valign="middle">性别</th>
                    <th width="10%" height="25" valign="middle">生日</th>
                    <th width="5%" height="25" valign="middle">民族</th>
                    <th width="15%" height="25" valign="middle">证件号</th>
                    <th width="15%" height="25" valign="middle" v-if="props.operate='del'">操作</th>
                </tr>
                <tr align="center" v-for="item in state.list" :key="item.id">
                    <td height="25" valign="middle">{{item.populationType}}</td>
                    <td height="25" valign="middle">{{item.populationId}}</td>
                    <td height="25" valign="middle">{{item.relation}}</td>
                    <td height="25" valign="middle">{{item.name}}</td>
                    <td height="25" valign="middle">{{item.sex}}</td>
                    <td height="25" valign="middle">{{item.birthday}}</td>
                    <td height="25" valign="middle">{{item.nation}}</td>
                    <td height="25" valign="middle">{{item.idNumber}}</td>
                    <td height="25" valign="middle" v-if="props.operate='del'">
                        <button @click="del(item.idNumber)">删除</button>
                    </td>
                </tr>
            </table>
        </div>
    </template>

    <script setup>
        import axios from 'axios';
        import qs from 'qs';
        let emit=defineEmits(['getPop'])
        //showpop是否显示同步查询按钮
        let props=defineProps(['title','showpop','operate'])
        import {reactive} from 'vue';
        let state = reactive({
            idNumber: undefined,
            list: [],
            populationId: undefined,
        })
        function del(idNumber){
            //alert(idNumber)
            let flag=confirm('确定要删除么')
            if(flag){
                axios.get("http://localhost:8081/ssmstudy/population/del?idNumber=" + state.idNumber)
            }
        }
        function selectPerson() {
            axios.get("http://localhost:8081/ssmstudy/population/findByIdNumber?idNumber=" + state.idNumber)
                .then(res => {
                    state.list = res.data;
                    state.populationId = res.data[0].populationId;
                    emit('getPop',state.list)
                })
        }

        function selectPersonAll() {
            axios.get("http://localhost:8081/ssmstudy/population/findAll?idNumber=" + state.idNumber)
                .then(res => {
                    state.list = res.data;
                    state.populationId = res.data[0].populationId;
                    emit('getPop',state.list)
                })
        }
    </script>

    <style scoped>
        .strong {
            font-weight: 600;
        }

        .left {
            text-align: left;
        }

        .right {
            text-align: right;
        }
        h3 {
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .mid {
            text-align: center;
        }
    </style>

components/Regist

    <template>
        <div class="regist">
            <h3>{{title}}</h3>
            <table border="0" cellspacing="10px" cellpadding="0" width="90%">
                <tr>
                    <td class="strong right" width="10%">姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名:</td>
                    <td width="20%" class="left">
                        <input type="text" v-model="state.form.name" />
                    </td>
                    <td class="strong right" width="10%">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</td>
                    <td width="20%" class="left">
                        <select v-model="state.form.sex"  >
                            <option v-for="item in state.dictList.xb" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                        </select>
                    </td>
                    <td class="strong right" width="10%">与户主关系:</td>
                    <td width="30%" class="left">
                        <select v-model="state.form.relation">
                            <option v-for="item in state.dictList.hzgx" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                        </select>
                    </td>
                </tr>

                <tr>
                    <td class="strong right">出生日期:</td>
                    <td class="left">
                        <input type="date" v-model="state.form.birthday" />
                    </td>
                    <td class="strong right">身份证号:</td>
                    <td class="left">
                        <input type="text" v-model="state.form.idNumber" />
                    </td>
                    <td class="strong right">宗教信仰:</td>
                    <td class="left">
                        <input type="text" v-model="state.form.religiousBelief" />
                    </td>
                </tr>
                <tr>
                    <td class="strong right" width="12%">文化程度:</td>
                    <td width="18%" class="left">
                        <select v-model="state.form.educationalLevel">
                            <option v-for="item in state.dictList.whcd" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                        </select>
                    </td>
                    <td class="strong right" width="12%">婚姻状况:</td>
                    <td width="18%" class="left">
                        <select v-model="state.form.marriage">
                            <option v-for="item in state.dictList.hyzk" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                            
                        </select>
                    </td>
                    <td class="strong right" width="12%">兵役情况:</td>
                    <td width="28%" class="left">
                        <select v-model="state.form.militaryService">
                            <option v-for="item in state.dictList.byqk" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td class="strong right" width="12%">民&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;族:</td>
                    <td width="18%" class="left">
                        <select v-model="state.form.nation">
                            <option v-for="item in state.dictList.mz" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                            
                        </select>
                    </td>
                    <td class="strong right" width="12%">血&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;型:</td>
                    <td width="18%" class="left">
                        <select v-model="state.form.bloodType">
                            <option v-for="item in state.dictList.xx" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                            
                        </select>
                    </td>
                    <td class="strong right" width="12%">职&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;业:</td>
                    <td width="28%" class="left">
                        <input type="text" v-model="state.form.job" />
                    </td>
                </tr>
                <tr>
                    <td class="strong right" width="12%">住&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;址:</td>
                    <td width="18%" class="left">
                        <input type="text" v-model="state.form.address" />
                    </td>
                    <td class="strong right" width="12%">户口类型:</td>
                    <td width="18%" class="left">
                        <select v-model="state.form.populationType">
                            <option v-for="item in state.dictList.hklx" :key="item.id"  :value="item.id">{{item.constantName}}</option>
                        </select>
                    </td>
                    <td class="strong right" width="12%">户主姓名</td>
                    <td width="28%" class="left">
                        <input type="text" v-model="state.form.houseHolder" />
                    </td>
                </tr>

                <tr>
                    <td colspan="6" class="mid">
                        <input type="button" value="保存" @click="regist()" />
                    </td>
                </tr>
            </table>
            <div v-show="state.flag">{{state.resultMsg}}</div>
        </div>
    </template>

    <script setup>
        import {onMounted, onUpdated, reactive} from 'vue';
        import axios from 'axios';
        import qs from 'qs';
        //backup01后台用的  =    0-立户 1-出生申报 2-夫妻投靠 3-父母投靠子女
        //title 前台的 populationId 存到哪个户口下
        const myProps = defineProps(['title','populationId','operate','population'])
        
        //1,性别数据开始时置空
         let state =reactive({flag:false,resultMsg:'',dictList:{},
         form:{
             id:undefined,
            name: undefined,
            sex: undefined,
            relation: undefined,
            birthday: undefined,
            idNumber: undefined,
            educationalLevel: undefined,
            marriage: undefined,
            militaryService: undefined,
            nation: undefined,
            bloodType: undefined,
            job: undefined,
            populationId: undefined,
            religiousBelief: undefined,
            address: undefined,
            populationType:undefined,//户口类型,城镇 非城镇
            houseHolder:undefined,//户主姓名,
            operate:undefined
        }
         })
        function regist() {
        //把operate补全
        state.form.operate=myProps.operate;
        //补全户号
        //alert("户号"+myProps.populationId)
        if(myProps.populationId!=undefined){
        state.form.populationId=myProps.populationId;
        }
        axios.post("http://localhost:8081/ssmstudy/population/save",qs.stringify(state.form))
        .then(res=>{
            state.flag=true;
            state.resultMsg=res.data.message
        })
              
        }
        
        
        
        onMounted(()=>{
             axios.get("http://localhost:8081/ssmstudy/constantType/findAll")
             .then(res=>{
                 //console.log(res.data)
                 state.dictList=res.data
                 
             })
             
             //如果是修改信息的话,把原始信息加载进来
             
             //state.form=myProps.population
        })
        onUpdated(()=>{
            //console.log("myProps.population",myProps.population)
            //alert("onUpdated-populationId "+myProps.populationId)
            if(myProps.population!=null){
                state.form=myProps.population
            }
        })
        
    </script>

    <style scoped>
        .strong {
            font-weight: 600;
        }

        .left {
            text-align: left;
        }

        .right {
            text-align: right;
        }

        h3 {

            display: flex;
            justify-content: center;
            align-items: center;
        }

        .mid {
            text-align: center;
        }
    </style>

页面

app.vue
/views/population/Login

    <template>
      <!--路由出口,变动的是这部分内容 -->
      <router-view/>
    </template>

    <style>
    body{
            margin:0;
            padding:0;
        }
    input[type='button']:link,input[type='button']:visited{
                    text-decoration: none;
                    color:#BFC0B3;
                    font-size: 14px;
                }
    input[type='button']:hover{
                    background-color: #419efe;
                    border: none;
    }
    #app {
      font-family: Avenir, Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      text-align: center;
      color: #2c3e50;
    }

    nav {
      padding: 30px;
    }

    nav a {
      font-weight: bold;
      color: #2c3e50;
    }

    nav a.router-link-exact-active {
      color: #42b983;
    }
    </style>

/views/population/Index

    <template>
        <div class="container">
            <div class="left">
                <ul>
                    <li>
                      <router-link to="/populationAdd">户口立户</router-link>
                    </li>
                    <li>
                        <router-link to="/born">出生申报</router-link>
                    </li>
                    <li>
                        <router-link to="/spouse">夫妻投靠</router-link>
                    </li>
                    <li>
                        <router-link to="/parents">父母投靠子女</router-link>
                    </li>
                    <li>
                        <router-link to="/update">修改信息</router-link>
                    </li>
                    <li>
                        <router-link to="/del">注销户口</router-link>
                    </li>
                </ul>
            </div>
            <div class="right">
                <!-- 路由出口-->
                <router-view></router-view>
            </div>
        </div>
    </template>
    <script>
    </script>
    <style scoped>
        body {
            margin: 0;
        }

        .container {
            width: 100vw;
            height: 100vh;
            background-color: #fff;
            display: flex;
        }

        .left {
            flex: 2;
            background-color: #304156;

        }

        .right {
            flex: 10;
            background-color: #fff;
        }

        ul {
            list-style: none;
        }

        a:link, a:visited {
            text-decoration: none;
            color: #BFC0B3;
            font-size: 14px;
        }

        a:hover {
            background-color: #419efe;
            border: none;
        }
    </style>

/views/population/PopulationAdd

    <template>
        <div id="populationadd">
            <!-- operate   0-立户  1-出生申报 2-夫妻投靠 3-父母投靠子女  4-修改     -->
            <regist title="户口立户" operate="0" ></regist>
        </div>
    </template>

    <script setup>
        import regist from '@/components/Regist'
    </script>

    <style>
    </style>

/views/population/Born

    <template>
        <div class="regist">
            <querypop @getPop="getPop" title="监护人身份证号"></querypop>
            <regist title="出生申报" :populationId="state.populationId" operate=1 ></regist>
        </div>
    </template>

    <script setup>
    import { reactive } from 'vue';
    import regist from '@/components/Regist'
    import querypop from '@/components/QueryPop'
    let state=reactive({populationId:undefined})
    function getPop(list){
        //alert(list[0].populationId)
        state.populationId=list[0].populationId;
    }
    </script>

/views/population/Spouse

    <template>
        <div class="regist">
            <querypop @getPop="getPop" title="被投靠人身份证号"></querypop>
            <regist title="夫妻投靠" :populationId="state.populationId" operate=2 ></regist>
        </div>
    </template>

    <script setup>
    import { reactive } from 'vue';
    import regist from '@/components/Regist'
    import querypop from '@/components/QueryPop'
    let state=reactive({populationId:undefined})
    
    
    function getPop(list){
        //alert(list[0].populationId)
        state.populationId=list[0].populationId;
    }
    </script>

/views/population/Parents

    <template>
        <div class="regist">
            <querypop @getPop="getPop" title="被投靠人身份证号"></querypop>
            <regist title="父母投靠" :populationId="state.populationId" operate=3 ></regist>
        </div>
    </template>

    <script setup>
    import { reactive } from 'vue';
    import regist from '@/components/Regist'
    import querypop from '@/components/QueryPop'
    let state=reactive({populationId:undefined})
    function getPop(list){
        //alert(list[0].populationId)
        state.populationId=list[0].populationId;
    }
    </script>

/views/population/Update

    <template>
        <div class="regist">
            <querypop @getPop="getPop" title="身份证号" showpop="0"></querypop>
            <regist title="修改信息" :population="state.population" operate=4 ></regist>
        </div>
    </template>

    <script setup>
    import { reactive } from 'vue';
    import regist from '@/components/Regist'
    import querypop from '@/components/QueryPop'
    let state=reactive({population:undefined})
    function getPop(list){
        state.population=list[0];
    }
    </script>

/views/population/Del

    <template>
        <div class="del">
            <querypop  title="身份证号" operate="del"></querypop>
            
        </div>
    </template>

    <script setup>
    import { reactive } from 'vue';
    import regist from '@/components/Regist'
    import querypop from '@/components/QueryPop'
    
    </script>

后端

1、后端实体类 com.neuedu.po

import lombok.Data;

    package com.neuedu.po;
    
    import lombok.Data;
    
    @Data
    public class ConstantType {
    private Integer id;
    private String constantTypeCode;
    private String constantTypeName;
    }
    
    @Data
    public class ConstantItem {
    private Integer id;
    private String constantName;
    private Integer constantTypeId;
    
    }
    
    @Data
    public class Person {
        private Integer id;
        private String name;
        private Integer sex;
        private Integer relation;
        private String birthday;
        private String idNumber;
        private Integer educationalLevel;
        private Integer marriage;
        private Integer militaryService;
        private Integer nation;
        private Integer bloodType;
        private String job;
        private String populationId;
        private String religiousBelief;
        
    }
    
    @Data
    public class PersonLog {
        private Integer id;
        private String populationId;
        private Integer personId;
        private String operateType;
        private String operateDetail;
        private String operateTime;
        private Integer operateUser;
    }
    
    @Data
    public class Population {
        private String id;
        private String populationType;
        private String houseHolder;
        private String address;
    
    }
    
    @Data
    public class PopulationLog {
        
        private Integer id;
        private String populationId;
        private String operateType;
        private String operateDetail;
        private String operateTime;
        private Integer operateUser;
    
    }
    
    @Data
    public class ResultMsg {
        //返回码 0-成功     -1 用户名错误 -2密码错误
        int code;
        //描述  成功/错误原因
        String message;
        
    }
    
    @Data
    public class User {
    private int id;
    private String userName;
    private String password;
    private String role;
    
    }   

2、后端 controller

    @RestController
    @RequestMapping("/constantType")
    public class ConstantTypeController {
        @Autowired
        IConstantTypeService service;
        @RequestMapping("/findAll")
        public Map<String,List<ConstantItem>> findAll(){
            Map<String,List<ConstantItem>> map=service.findAll();
            return map;
        }
    }

    @RestController
    @RequestMapping("population")
    public class PopulationController {
        @Autowired
        IPopulationService service;
        @PostMapping("save")
        public ResultMsg save(Person person,Population population,String operate){
            System.out.println(person);
            System.out.println(population);
            //System.out.println(operate);
            ResultMsg msg=service.save(person,population,operate);
            
            return msg;
        }
        @RequestMapping("/findByIdNumber")
        public List<Map<String,Object>> findByIdNumber(String idNumber){
            List<Map<String,Object>> list = service.findByIdNumber(idNumber);
            return list;
        }
        
        @RequestMapping("/findAll")
        public List<Map<String,Object>> findAll(String idNumber){
            List<Map<String,Object>> list = service.findAll(idNumber);
            return list;
        }
        
        @RequestMapping("/del")
        public int del(String idNumber){
            int result =service.del(idNumber);
            return result;
        }
    }

    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        IUserService service;
        
        @RequestMapping("/login")
        public ResultMsg login(@RequestBody User user){
            return service.login(user);
        }
    }

3 后端 service##

    @Service
    public class UserServiceImpl implements IUserService {
    
        @Autowired
        UserMapper mapper;
        @Override
        public ResultMsg login(User user) {
            //根据用户名查询用户
            User db_user=mapper.getUserByUserName(user.getUserName());
            //如果没有查询到,直接回复用户名不存在
            ResultMsg rm=new ResultMsg();
            if(db_user==null){
                rm.setCode(-1);
                rm.setMessage("用户名错误");
            }else if(!db_user.getPassword().equals(user.getPassword())){
                //如果查询到,比对数据库里的密码与传过来的密码是否一致
                //如果不一致,直接回复密码错误
                rm.setCode(-2);
                rm.setMessage("密码错误");
                //如果一致,返回成功
            }else{
                rm.setCode(0);
                rm.setMessage("登录成功");
            }
            return rm;
        }
    }

    @Transactional
    @Service
    public class PopulationServiceImpl implements IPopulationService {
    
        @Autowired
        PersonMapper personMapper;
        @Autowired
        PersonLogMapper personLogMapper;
        @Autowired
        PopulationMapper populationMapper;
        @Autowired
        PopulationLogMapper populationLogMapper;
        @Autowired
        PersonHistoryMapper personHistoryMapper;
        @Autowired
        PopulationHistoryMapper populationHistoryMapper;
        
        public void getLog(Person person,Population population,String operate){
            PersonLog personLog = new PersonLog();
            personLog.setPersonId(person.getId());
            personLog.setPopulationId(person.getPopulationId());
            personLog.setOperateType(operate);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String date = sdf.format(new Date());
            personLog.setOperateTime(date);
            personLog.setOperateUser(1);
            personLog.setOperateDetail("xxxx");
            int restult3 = personLogMapper.save(personLog);
            PopulationLog populationLog = new PopulationLog();
            populationLog.setPopulationId(person.getPopulationId());
            populationLog.setOperateType(operate);
            populationLog.setOperateDetail("xxxxx");
            populationLog.setOperateTime(date);
            populationLog.setOperateUser(1);
            int restult4 = populationLogMapper.save(populationLog);
        }
    
        @Override
        public ResultMsg save(Person person, Population population, String operate) {
            ResultMsg msg = new ResultMsg();
            if (operate.equals("0")) {
                String populationId = UuidGenerate.get();
                person.setPopulationId(populationId);
                population.setId(populationId);
                int restult1 = populationMapper.save(population);
                if (restult1 > 0) {
                    int restult2 = personMapper.save(person);
                    if (restult2 > 0) {
                        PopulationServiceImpl service = new PopulationServiceImpl();
                        service.getLog(person, population, operate);
                    }
                }
                
                msg.setCode(0);
                msg.setMessage("立户成功");
                
            }else if(operate.equals("1")||operate.equals("2")||operate.equals("3")){
                int restult1 = personMapper.save(person);
                PopulationServiceImpl service = new PopulationServiceImpl();
                service.getLog(person, population, operate);
                if(restult1>0){
                    msg.setCode(0);
                    msg.setMessage("操作成功");
                    
                }
            }else if("4".equals(operate)){
                //修改
                //修改人员信息
                //修改户口信息
                //添加人员操作日志
                //添加户口操作日志
                population.setId(person.getPopulationId());
                int result1 =populationMapper.update(population);
                if(result1>0){
                    int result2 = personMapper.update(person); 
                    if(result2>0){
                        PopulationServiceImpl service = new PopulationServiceImpl();
                        service.getLog(person, population, operate);
                    }
                }
                 msg.setCode(0);
                 msg.setMessage("成功");
            }
            
            return msg;
        }
    
        @Override
        public List<Map<String, Object>> findByIdNumber(String idNumber) {
            List<Map<String, Object>> list = personMapper.findByIdNumber(idNumber);
            return list;
        }
    
        @Override
        public List<Map<String, Object>> findAll(String idNumber) {
            List<Map<String, Object>> list = personMapper.findAll(idNumber);
            return list;
        }
    
        @Override
        public int del(String idNumber) {
            
            int count=personMapper.selectAll(idNumber);
            if(count==1){
                int result4 = populationHistoryMapper.add(idNumber);
                int result3=personHistoryMapper.add(idNumber);
                int result =personMapper.del(idNumber);
                int result2 =populationMapper.del(idNumber);
            }else{
                int result3=personHistoryMapper.add(idNumber);
                int result =personMapper.del(idNumber);
            }
            
            return 1;
        }
    
    }


    @Service
    public class ConstantTypeServiceImpl implements IConstantTypeService {
        @Autowired
        ConstantTypeMapper mapper;
        
        @Autowired
        ConstantItemMapper itemMapper;
        @Override
        public Map<String, List<ConstantItem>> findAll() {
            List<ConstantType> list=mapper.findAll();
            Map<String,List<ConstantItem>> map=new HashMap();
            for(ConstantType type:list){
                //获取分类代码
                int typeId=type.getId();
                //根据typeId去查询下面的项目
                List<ConstantItem> itemList=itemMapper.findByTypeId(typeId);
                map.put(type.getConstantTypeCode(),itemList);
            }
            return map;
        }
    
    }

mapper

public interface UserMapper {
    @Select("select * from user where userName=#{userName}")
    User getUserByUserName(String userName);
}

  public interface ConstantTypeMapper {
   @Select("select * from constanttype")
List<ConstantType> findAll();
   }

    public interface ConstantItemMapper {
        @Select("select * from constantitem where constantTypeId=#{typeId}")
        List<ConstantItem> findByTypeId(int typeId);
    
    }

        public interface PersonMapper {
        @Options(useGeneratedKeys = true, keyProperty = "id")
        @Insert("insert into person values "
                + "(null,#{name},#{sex},#{relation},#{birthday},"
                + "#{idNumber},#{educationalLevel},#{marriage},"
                + "#{militaryService},#{nation},#{bloodType},#{job},"
                + "#{populationId},#{religiousBelief},null)")
        int save(Person person);
        @Select("select a.*,b.populationType,b.houseHolder,b.address "
                +" from person a,population b "
                +" where a.populationId = b.id "
                +" and a.idNumber =#{idNumber}")
        List<Map<String, Object>> findByIdNumber(String idNumber);
        
        @Select("select a.*,b.populationType,b.houseHolder,b.address "
                +" from person a,population b "
                +" where a.populationId = b.id "
                +" and a.populationId = (select populationId from person where idNumber = #{idNumber})")
        List<Map<String, Object>> findAll(String idNumber);
        @Update("update person set name=#{name},sex=#{sex},relation=#{relation},"
                + "educationalLevel=#{educationalLevel},marriage=#{marriage},"
                + "populationId=#{populationId},religiousBelief=#{religiousBelief} where idNumber=#{idNumber}")
        int update(Person person);
        
        @Delete("delete from person where idNumber=#{idNumber}")
        int del(String idNumber);
        
        @Select("select count(*) from person where populationId=(select populationId from person where idNumber=#{idNumber})")  
        int selectAll(String idNumber);
    
    }


    public interface PersonHistoryMapper {
        @Insert("insert into person_history select * from person where idNumber = #{idNumber} "
                + " and not EXISTS(select * from person_history where idNumber=#{idNumber})")
        int add(String idNumber);
    }

public interface PersonLogMapper {
    @Insert("insert into person_log values (null,#{populationId},#{personId},#{operateType},#{operateTime},#{operateUser},#{operateDetail})")
    int save(PersonLog personLog);
}

    public interface PopulationMapper {
         
        int save(Population population);
        @Update("update population set populationType=#{populationType},"
                + "houseHolder=#{houseHolder},address=#{address} where id=#{id}")
        int update(Population population);
        
        @Delete("delete from population where id=(select populationId from person_history where idNumber=#{idNumber})")
        int del(String idNumber);
    
    }

public interface PopulationHistoryMapper {
    @Insert("insert into population_history select * from population"
            + " where id = (select populationId from person where idNumber = #{idNumber}) ")
    int add(String idNumber);

}

public interface PopulationHistoryMapper {
    @Insert("insert into population_history select * from population"
            + " where id = (select populationId from person where idNumber = #{idNumber}) ")
    int add(String idNumber);

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容