前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、导入工具类
package com.gzlg.mybatis.utils;
import com.gzlg.mybatis.cfg.Configuration;
import com.gzlg.mybatis.cfg.Mapper;
import com.gzlg.mybatis.io.Resources;
import com.sun.org.apache.bcel.internal.generic.Select;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class XMLConfigBuilder {
// 解析主配置文件,把里面的内容填充到DefaultSqlSession所需要的地方
//使用技术:dom4j+path
public static Configuration loadConfiguration(InputStream config){
try {
// 定义封装连接信息的配置对象(mybatis的配置对象)
Configuration cfg = new Configuration();
// 1.获取SAReader对象
SAXReader reder = new SAXReader();
// 2.根据字节输入流获取Document对象;
Document document = reder.read(config);
// 3.获取根节点
Element root = document.getRootElement();
// 4.使用xpath中选择指定节点的方式,获取所有property节点
List<Element> propertyElements = root.selectNodes("//property");
// 5.遍历节点
for (Element propertyElement : propertyElements) {
// 判断节点是连接数据库的哪部分信息
// 去除name属性值
String name = propertyElement.attributeValue("name");
if ("driver".equals(name)) {
// 表示驱动获取property标签value属性的值
String driver = propertyElement.attributeValue("value");
cfg.setDriver(driver);
}
if ("url".equals(name)) {
// 获取连接字符串
// 获取property标签value属性的值
String url = propertyElement.attributeValue("value");
cfg.setUrl(url);
}
if ("username".equals(name)) {
// 用户名
// 获取property标签value属性的值
String username = propertyElement.attributeValue("value");
cfg.setUsername(username);
}
if ("password".equals(name)) {
// 密码
// 获取property标签value属性的值
String password = propertyElement.attributeValue("value");
cfg.setPassword(password);
}
}
// 去除mappers中所有mappper标签,判断他们使用了resource还是class属性
List<Element> mapperElements = root.selectNodes("//mappers/mapper");
// 遍历集合
for (Element mapperElement : mapperElements) {
// 判断mapperElement使用的是哪个属性
Attribute attribute = mapperElement.attribute("resource");
if (attribute != null) {
System.out.println("使用的是XML");
// 表示resource属性,使用的是XMl,取出属性值“com/gzlg/dao/IUserDao.xml
String mapperPath = attribute.getValue();
// 把映射配置文件的内容获取出来,封装成一个map
Map<String, Mapper> mappers = loadMapperConfiguration(mapperPath);
// 给configuration中的mappers赋值
cfg.setMappers(mappers);
} else {
// System.out.println("使用的是注解");
// // 表示没有resource属性,用的是注解
// // 获取class属性的值
// String daoClassPath=mapperElement.attributeValue("class");
// // 根据daoClassPath获取封装的必要信息
// Map<String,Mapper>mappers=loadMapperAnnotation(daoClassPath);
// // 给configuration中的mappers赋值
// cfg.setMappers(mappers);
}
}
// 返回configuration
return cfg;
}catch (Exception e){
throw new RuntimeException(e);
}finally {
try {
config.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 根据传入的参数,解析xml,并且封装到Map中
* @param mapperPath 映射配置文件的位置
* @return map中包含了获取的唯一标识(key是由dao全限定类名和方法组成)
* 以及执行所需的必要信息(value是一个Mapper对象,里面存放的是执行SQL语句和要封装的实体类全限定类名
*/
private static Map<String, Mapper> loadMapperConfiguration(String mapperPath) throws IOException {
InputStream in=null;
try {
// 定义返回值对象(map比list查找速度快)
Map<String,Mapper> mappers=new HashMap<String, Mapper>();
// 1.根据路径获取字节输入流
in= Resources.getResourceAsStream(mapperPath);
// 2.根据字节输入流获取Document对象
SAXReader reader=new SAXReader();
Document document=reader.read(in);
// 3.获取根节点
Element root=document.getRootElement();
// 4.获取根节点的namespace属性值
String namespace=root.attributeValue("namespace");//是组成map中key的组成部分
// 5.获取所有的select节点
List<Element> selectElements=root.selectNodes("//select");
// 6.遍历select节点集合
for (Element selectElement:selectElements){
// 取出id属性值 组成map中key部分
String id=selectElement.attributeValue("id");
// 取出resultType属性的值 组成map中key部分
String resultType=selectElement.attributeValue("resultType");
// 取出文本内容sql语句
String queryString=selectElement.getText();
// 创建key
String key=namespace+""+id;
// 创建value
Mapper mapper=new Mapper();
mapper.setQueryString(queryString);
mapper.setResultType(resultType);
// 把key和value存入mapper中
mappers.put(key,mapper);
}
return mappers;
} catch (DocumentException e) {
e.printStackTrace();
}finally {
in.close();
}
return null;
}
}
/**
* 根据传入的参数得到dao中所有被select注解标注的方法
* 根据方法名称和类名,以及方法上注解value属性的值,组成Mapper的必要信息
*/
// private static Map<String, Mapper> loadMapperAnnotation(String daoClassPath) {
//// 定义返回值对象
// Map<String,Mapper> mappers=new HashMap<String, Mapper>();
//// 1.得到dao接口的字节码对象
// Class daoClass=Class.forName(daoClassPath);
//// 2.得到dao接口中的方法数组
// Method[] methods=daoClass.getMethods();
//// 3.遍历Method数组
// for (Method method:methods){
//// 取出每一个方法,判断是否有select注解
// boolean isAnnotated=method.isAnnotationPresent(Select.class);
// if (isAnnotated){
//// 创建Mapper对象
// Mapper mapper=new Mapper();
//// 取出注解的Value属性值
// Select selectAnno=method.getAnnotation(Select.class);
// String queryString=selectAnno.value();
// mapper.setQueryString(queryString);
//// 获取当前方法的返回值,还要求必须带有泛型信息
// Type type=method.getGenericReturnType();//list<User>
//// 判断type是不是参数化的类型
// if (type instanceof ParameterizedType){
//// 强转
// ParameterizedType ptype.getActualTypeArguments();
//// 得到参数化类型中的实际类型参数
// Type[] types=ptype.getActualTypeArguments();//
//// 取出第一个
// Class domainClass=(Class)types[0];
//// 获取domainClass的类名
// String resultType=domainClass.getName();
//// 给Mapper赋值
// mapper.setResultType(resultType);
// }
//// 组装key的信息,获取方法的名称
// String methodName=method.getName();
// String className=method.getDeclaringClass().getName();
// String key=className+""+methodName;
//// 给map赋值
// mappers.put(key,mapper);
// }
// }
// return mappers;
// }
//}
二、使用步骤
1.导入daom4j坐标(pom.xml加入)
代码如下(示例):
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。