1月1日 MyBatis创建+增删改+Kruskal算法
来源:互联网 发布:高仿鞋淘宝上怎么找 编辑:程序博客网 时间:2024/06/05 15:42
MyBatis创建:
利用generator.xml和mybatis-generator-core-1.3.2.jar自动生成通用DAO层和通用Model层,generator.xml文件修改如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!-- 数据库驱动包位置 --><!-- <classPathEntry location="D:\software\lib\mysql-connector-java-5.1.21.jar" /> --><classPathEntry location="F:\MyBatisMake\mysql-connector-java-5.1.5-bin.jar" /><context id="mysqltools" targetRuntime="MyBatis3"><commentGenerator><property name="suppressAllComments" value="true" /></commentGenerator><!-- 数据库链接URL、用户名、密码 --><!-- <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/sy" userId="sypro" password="sypro"> --><jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8" userId="root" password="111"></jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- 生成模型的包名和位置 --><javaModelGenerator targetPackage="com.MyBatis.model" targetProject="C:\mybatisgen"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- 生成的映射文件包名和位置 --><sqlMapGenerator targetPackage="com.MyBatis.mapping" targetProject="C:\mybatisgen"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- 生成DAO的包名和位置 --><javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.MyBatis.mapper" targetProject="C:\mybatisgen"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- 要生成那些表(更改tableName和domainObjectName就可以)更复杂的方式如下: 但基本不常用<table tableName="tmenu" domainObjectName="Menu" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />--><table tableName="company" domainObjectName="Company" /><table tableName="emp" domainObjectName="Emp" /></context></generatorConfiguration>其中ANNOTATEDMAPPER为注解生成方法,这个通用生成工具并不会生成目标文件夹,所以targetProject所对应的的位置要保证存在。
生成语句如下:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
导入MyBatis配置文档mybatis.cfg.xml到工程resources文件夹下,mybatis.cfg.xml修改如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8" /> <property name="username" value="root" /> <property name="password" value="111" /> </dataSource> </environment> </environments> <mappers> <mapper class="com.MyBatis.mapper.CompanyMapper" /> <mapper class="com.MyBatis.mapper.EmpMapper" /> </mappers> </configuration>其中要注意xml中&要由转义字符&代替
MyBatis增删改:
package com.MyBatis.service;import com.MyBatis.mapper.CompanyMapper;import com.MyBatis.model.Company;import org.apache.ibatis.session.ResultHandler;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.jupiter.api.Test;import java.io.InputStream;/** * Created by Administrator on 2017/1/3. */public class CompanyService { private SqlSessionFactory ssf = null; public CompanyService(){ InputStream is = CompanyService.class.getClassLoader().getResourceAsStream("mybatis.cfg.xml"); ssf = new SqlSessionFactoryBuilder().build(is); } public void add() { SqlSession session = ssf.openSession(); try { Company com = new Company(); com.setAddress("大成街"); com.setName("Sara"); com.setPrice(5000); com.setCity("黑龙江"); com.setPro("哈尔滨"); session.insert("com.MyBatis.mapper.CompanyMapper.insert", com); session.commit(); session.close(); } catch (Exception e) { session.rollback(); e.printStackTrace(); } } public void delete(){ SqlSession session = ssf.openSession(); try{ Company com = new Company(); com.setCid(5); session.delete("com.MyBatis.mapper.CompanyMapper.deleteByPrimaryKey",com); session.commit(); session.close(); }catch (Exception e){ session.rollback(); e.printStackTrace(); } } public void update(){ SqlSession session = ssf.openSession(); try{ Company com = new Company(); com.setCid(3); com.setName("Sara丶YF"); session.update("com.MyBatis.mapper.CompanyMapper.updateByPrimaryKeySelective",com); session.commit(); session.close(); }catch (Exception e){ session.rollback(); e.printStackTrace(); } }}
Kruskal算法:
1.概览
Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪婪算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。
2.算法简单描述
1).记Graph中有v个顶点,e个边
2).新建图Graphnew,Graphnew中拥有原图中相同的e个顶点,但没有边
3).将原图Graph中所有e个边按权值从小到大排序
4).循环:从权值最小的边开始遍历每条边 直至图Graph中所有的节点都在同一个连通分量中
if 这条边连接的两个节点于图Graphnew中不在同一个连通分量中
添加这条边到图Graphnew中
图例描述:
首先第一步,我们有一张图Graph,有若干点和边
将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心算法的思想。资源排序,对局部最优的资源进行选择,排序完成后,我们率先选择了边AD。这样我们的图就变成了右图
在剩下的变中寻找。我们找到了CE。这里边的权重也是5
依次类推我们找到了6,7,7,即DF,AB,BE。
下面继续选择, BC或者EF尽管现在长度为8的边是最小的未选择的边。但是现在他们已经连通了(对于BC可以通过CE,EB来连接,类似的EF可以通过EB,BA,AD,DF来接连)。所以不需要选择他们。类似的BD也已经连通了(这里上图的连通线用红色表示了)。
3.简单证明Kruskal算法
对图的顶点数n做归纳,证明Kruskal算法对任意n阶图适用。
归纳基础:
n=1,显然能够找到最小生成树。
归纳过程:
假设Kruskal算法对n≤k阶图适用,那么,在k+1阶图G中,我们把最短边的两个端点a和b做一个合并操作,即把u与v合为一个点v',把原来接在u和v的边都接到v'上去,这样就能够得到一个k阶图G'(u,v的合并是k+1少一条边),G'最小生成树T'可以用Kruskal算法得到。
我们证明T'+{<u,v>}是G的最小生成树。
用反证法,如果T'+{<u,v>}不是最小生成树,最小生成树是T,即W(T)<W(T'+{<u,v>})。显然T应该包含<u,v>,否则,可以用<u,v>加入到T中,形成一个环,删除环上原有的任意一条边,形成一棵更小权值的生成树。而T-{<u,v>},是G'的生成树。所以W(T-{<u,v>})<=W(T'),也就是W(T)<=W(T')+W(<u,v>)=W(T'+{<u,v>}),产生了矛盾。于是假设不成立,T'+{<u,v>}是G的最小生成树,Kruskal算法对k+1阶图也适用。
由数学归纳法,Kruskal算法得证。
4.代码算法实现
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;const int Maxn = 50005;int set[Maxn];int n,m;struct Edge{ int a,b; int dis;}Ed[Maxn];int cmp(const void *a,const void *b){ struct Edge *c,*d; c = (Edge*)a; d = (Edge*)b; return c->dis - d->dis;}int find(int x){ int k,j,r; r = x; while(r != set[r]) { r = set[r]; } k = x; while(k != r) { j = set[k]; set[k] = r; k = j; } return r;}void merge(int x,int y){ set[y] = x;}void init(){ for(int i=1;i<=n;i++) { set[i] = i; }}int Kruskal(){ int ans = 0; int cnt = 0; qsort(Ed,m,sizeof(Ed[0]),cmp); for(int i=0;i<m;i++) { int f1 = find(Ed[i].a); int f2 = find(Ed[i].b); if(f1 == f2) continue; else { cnt++; ans += Ed[i].dis; merge(f1,f2); } if(cnt == n-1) { return ans; } } return -1;}int main(){ while(~scanf("%d%d",&n,&m)) { init(); for(int i=0;i<m;i++) { scanf("%d%d%d",&Ed[i].a,&Ed[i].b,&Ed[i].dis); } int ans = Kruskal(); printf("%d\n",ans); }}
5.时间复杂度
elog2e e为图中的边数
- 1月1日 MyBatis创建+增删改+Kruskal算法
- 1月2日 MyBatis联动查询+Prim算法
- Struts2+spring+MyBatis增删改查操作(1)
- Mybatis 增删改查
- mybatis增删改查
- mybatis增删改查
- mybatis增删改操作
- MyBatis批量增删改
- mybatis 增删改查
- MyBatis增删改查
- mybatis--增删改查
- MyBatis增删改查
- MyBatis增删改查
- mybatis增删改查
- Mybatis增删改查
- mybatis增删改查
- mybatis增删改
- mybatis增删改查
- 调试的时候,调试页面的配置
- 微信公众平台授权登录
- 使用属性position:fixed的时候如何才能让div居中
- scala数据结构和算法-07-希尔排序
- JSP、Servlet中的相对路径和绝对路径 页面跳转问题
- 1月1日 MyBatis创建+增删改+Kruskal算法
- 安卓常用资源地址整合
- MySQL——MyISAM表级锁
- Regular Expression Matching
- 计算机之旅(just for fun)(未完)
- 线性回归
- RPC是什么
- interj idea常用快捷键
- java生成txt文件