⑴ java中,实体类是什么意思
在javaweb中,实体类里面的某一个类,相当于是数据库里的一张表,一个类里面的某个字段相当于表的列名。
在实体里有getter和setter方法,getter是只读,setter是写入。
希望能对楼主有帮助,谢谢采纳
⑵ 什么是java实体类
在Java中,实体类就是一个拥有Set和Get方法的类。实体类通常总是和数据库之类的(所谓持久层数据)联系在一起。这种联系是借由框架(如Hibernate)来建立的。
实体类主要是作为数据管理和业务逻辑处理层面上存在的类别;
它们主要在分析阶段区分
实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。
⑶ 如何通过java反射将数据库表生成实体类
首先有几点声明:
1、代码是在别人的基础进行改写的;
2、大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人;
3、刚刚毕业,水平有限,肯定有许多不足之处;
4、希望刚刚学习java的同学能有所启发。
//这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随意
package com.tt.util.gen.entity.tool;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import com.tt.util.DB;
public class GenEntityMysql {
private String packageOutPath;// 指定实体生成所在包的路径
private String authorName;// 作者名字
private String tablename;// 表名
private String databasename;// 数据库名
private List<String> tablenames;// 拿到对应数据库中所有的实体类(实体类需要与其他表明做区分)
private List<String> colnames; // 列名集合
private List<String> colTypes; // 列名类型集合
private boolean f_util = false; // 是否需要导入包java.util.*
private boolean f_sql = false; // 是否需要导入包java.sql.*
/*
* 构造函数
*/
public GenEntityMysql() {
// 使用properties读取配置文件
Properties prop = new Properties();
try {
InputStream genentity = getClass().getResourceAsStream(
"/genentity.properties");
prop.load(genentity);
if (genentity != null) {
genentity.close();
}
} catch (Exception e) {
System.out.println("file " + "catalogPath.properties"
+ " not found!\n" + e);
}
this.databasename = prop.getProperty("databasename").toString();
this.tablename = prop.getProperty("tablename").toString();
this.packageOutPath = prop.getProperty("packageOutPath").toString();
this.authorName = prop.getProperty("authorName").toString();
}
// 创建多个实体类
private void genEntity(List<String> tablenames, Connection conn) {
// 使用第归生成文件
for (String tablename : tablenames) {
this.genEntity(tablename, conn);
}
}
// 创建单个实体类
private void genEntity(String tablename, Connection conn) {
String sql = "select * from " + tablename;
PreparedStatement pstmt = null;
ResultSetMetaData rsmd = null;
try {
pstmt = DB.getPStmt(conn, sql);
rsmd = pstmt.getMetaData();
int size = rsmd.getColumnCount(); // 统计列
colnames = new ArrayList<String>();
colTypes = new ArrayList<String>();
for (int i = 0; i < size; i++) {
colnames.add(rsmd.getColumnName(i + 1));
colTypes.add(rsmd.getColumnTypeName(i + 1));
if (colTypes.get(i).equalsIgnoreCase("datetime")) {
f_util = true;
}
if (colTypes.get(i).equalsIgnoreCase("image")
|| colTypes.get(i).equalsIgnoreCase("text")) {
f_sql = true;
}
}
System.out.println(colnames);
System.out.println(colTypes);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
DB.close(pstmt);
}
// 在内存中生成代码
String content = parse(tablename);
// 写入到文件中
try {
File directory = new File("");
String outputPath = directory.getAbsolutePath() + "/src/"
+ this.packageOutPath.replace(".", "/") + "/";
System.out.println("写出的路径:" + outputPath);
// 检测路径是否存在,不存在就创建路径
File path = new File(outputPath);
if (!path.exists() && !path.isDirectory()) {
path.mkdir();
System.out.println(path.exists());
}
// 创建文件
outputPath += initcap(tablename) + ".java";
File file = new File(outputPath);
if (!file.exists()) {
file.createNewFile();
}
// 写出到硬盘
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void getAllEntityTable(Connection conn, List<String> tablenames) {
ResultSet rs = null;
try {
DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData();
/*
* TABLE_CAT String => 表类别(可为 null)
* TABLE_SCHEM String => 表模式(可为null)
* TABLE_NAME String => 表名称
* TABLE_TYPE String => 表类型
*/
rs = dmd.getTables(null, null, "%", null);
while (rs.next()) {
tablenames.add(rs.getString("TABLE_NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
*
* @param tablename
* @return
*/
private String parse(String tablename) {
StringBuffer sb = new StringBuffer();
// 判断是否导入工具包
if (f_util) {
sb.append("import java.util.Date;\r\n");
}
if (f_sql) {
sb.append("import java.sql.*;\r\n");
}
sb.append("package " + this.packageOutPath + ";\r\n");
sb.append("\r\n");
// 注释部分
sb.append(" /**\r\n");
sb.append(" * " + tablename + " 实体类\r\n");
sb.append(" * " + new Date() + " " + this.authorName + "\r\n");
sb.append(" */ \r\n");
// 实体部分
sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");
processAllAttrs(sb);// 属性
processAllMethod(sb);// get set方法
sb.append("}\r\n");
return sb.toString();
}
/**
* 功能:生成所有属性
*
* @param sb
*/
private void processAllAttrs(StringBuffer sb) {
for (int i = 0; i < colnames.size(); i++) {
sb.append("\tprivate " + sqlType2JavaType(colTypes.get(i)) + " "
+ colnames.get(i) + ";\r\n");
}
}
/**
* 功能:生成所有方法
*
* @param sb
*/
private void processAllMethod(StringBuffer sb) {
for (int i = 0; i < colnames.size(); i++) {
sb.append("\tpublic void set" + initcap(colnames.get(i)) + "("
+ sqlType2JavaType(colTypes.get(i)) + " " + colnames.get(i)
+ "){\r\n");
sb.append("\t\tthis." + colnames.get(i) + "=" + colnames.get(i)
+ ";\r\n");
sb.append("\t}\r\n");
sb.append("\tpublic " + sqlType2JavaType(colTypes.get(i)) + " get"
+ initcap(colnames.get(i)) + "(){\r\n");
sb.append("\t\treturn " + colnames.get(i) + ";\r\n");
sb.append("\t}\r\n");
}
}
/**
* 功能:将输入字符串的首字母改成大写
*
* @param str
* @return
*/
private String initcap(String str) {
char[] ch = str.toCharArray();
if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}
return new String(ch);
}
/**
* 功能:获得列的数据类型
*
* @param sqlType
* @return
*/
private String sqlType2JavaType(String sqlType) {
if (sqlType.equalsIgnoreCase("bit")) {
return "boolean";
} else if (sqlType.equalsIgnoreCase("tinyint")) {
return "byte";
} else if (sqlType.equalsIgnoreCase("smallint")) {
return "short";
} else if (sqlType.equalsIgnoreCase("int")) {
return "int";
} else if (sqlType.equalsIgnoreCase("bigint")) {
return "long";
} else if (sqlType.equalsIgnoreCase("float")) {
return "float";
} else if (sqlType.equalsIgnoreCase("decimal")
|| sqlType.equalsIgnoreCase("numeric")
|| sqlType.equalsIgnoreCase("real")
|| sqlType.equalsIgnoreCase("money")
|| sqlType.equalsIgnoreCase("smallmoney")) {
return "double";
} else if (sqlType.equalsIgnoreCase("varchar")
|| sqlType.equalsIgnoreCase("char")
|| sqlType.equalsIgnoreCase("nvarchar")
|| sqlType.equalsIgnoreCase("nchar")
|| sqlType.equalsIgnoreCase("text")) {
return "String";
} else if (sqlType.equalsIgnoreCase("datetime")) {
return "Date";
} else if (sqlType.equalsIgnoreCase("image")) {
return "Blod";
}
return null;
}
/**
* 出口 TODO
*
* @param args
*/
public static void main(String[] args) {
new GenEntityMysql().start();
}
private void start() {
// 创建连接
Connection conn = DB.getConn();
if (databasename != null && !databasename.equals("")
&& tablename != null && !tablename.equals("")) {
System.out.println("databasename 和 tablename 不能同时存在");
} else {
// 如果配置文件中有数据库名字,则可以拿到其中所有的实体类
if (databasename != null && !databasename.equals("")) {
// 获取所有实体表名字
tablenames = new ArrayList<String>();
getAllEntityTable(conn, tablenames);
System.out.println(tablenames);
// 为每个实体表生成实体类
genEntity(tablenames, conn);
} else {
// 为指定实体表生成实体类
genEntity(tablename, conn);
}
// 关闭数据库连接
if (conn != null) {
DB.close(conn);
}
}
}
}
⑷ JAVA中,类、对象、实体、实体类、实体对象之间存在怎样的联系请高手做形象的解释。
类: java中的类 一般来存放实现了某些功能的代码 代码片段,是程序的基础元素
对象:对象是一个很抽象的概念,比如 一个java类 实例化以后可以称为一个对象 对象一般指的就是一个类创建出来的实例 比如
public class A{}
那么 A是一个类
A a =new A();
那么 这里的a 指的就是A这个类的实例 也就是对象 通过对象a 可以访问A类下面的 非私有字段 和方法
实体类:一般会与实体对象一起出现 对应数据库 或者其他数据源中的 一张表 俗称为一个对象
这里的实体类对象和实体类 打个简单的比方
实体类 就好像事一张白纸 白纸的获得 要从厂商那边取得 也就是我们去买 在程序里 就是用的关键字new 当new了以后 就好像是我们从生产厂商那里买来了一张白纸 当然 白纸上什么都没有
有了这张白纸以后 我们就可以在白纸上给它赋值 让它独一无二 也就是对实体类进行封装数据
每一张白纸 从我们购买的时候 都是一样的对象 都是一个字都没有的白纸 但是 后来通过业务处理 使得白纸上都有了自己的东西 也就是对象实体中的数据封装
还可以把实体类比作一个模板 创建出来的实例对象 都是跟这个模板一样的 至于 模板里面填写的内容 那就要看你的赋值了 就拿最简单的简历来说 一般都会有简历模板 我们从网上下载一个简历模板 就是创建了一个实体类的对象 而这个简历模板 就相当于一个实体类 接下来 我们对下载下来的模板进行操作 也就是对 实体类对象进行操作 对实体类对象操作 是不会影响实体类的 这个例子里面 应该一目了然 然后 根据个人信息不同 我们再模板上填写的信息也不同 比如 姓名 年龄 等等 按照个人的信息来填写 所以 就会产生实体类的对象的属性 不同 相信这样解释 你应该可以理解了吧 关键还是要靠多写训练 熟能生巧 运用以后才能知道这些东西存在的奥妙
⑸ 什么是java实体类
其实就是只有一些属性在里面的类,只不过对应数据库的属性,只是我们叫他实体类。
⑹ Java实体类属性是另一个类的时候如何存数据库
添加注解存数据库。
当创建的类和数据库里面的每一项一一映射时,但是又需要多些一些属性是不存在数据库里面的,此时可以在此属性上加一个注解@TableField(exist = false)就可以,另外这里添加一些经常用到的注解@Id 表示这个字段是主键@Column(name = “xx”) 表示把字段和数据库的名字对应,理解成起别名@Transactional 可以作用在接口、类、类方法。
⑺ JAVA如何设计实体类
如果说的是对应数据库信息的实体类,……对Java来说,和普通的类一模一样。只是每个类设计者有不同的用法,比如说集合类,作为各种数据结构使用。实体类主要作为存储数据库信息使用。两者Java上有区别么?没有,只是代码不一样,用法不一样。
⑻ JAVA问题:实体类的作用
首先这样写是为了可以更方便的控制属性的读写(有只读 只写 和 读写)并且可以控制写的值是否合法(在set的时候进行判断赋值)以达到对数据操作的有效及安全,其次是为了让你的程序更方便的调用及操作(你可以将类实例后存在集合内)。