java.lang包里的类和新建的实体类有什么区别
时间: 2024-01-02 18:03:35 浏览: 64
`java.lang`包是Java语言提供的核心包之一,其中定义了Java语言的基本类和接口。这些类和接口通常被认为是Java语言的“内置类型”,可以直接在代码中使用,无需导入。
新建的实体类则是根据业务需求自定义的Java类,用于表示数据库中的一张表或多张表之间的关联关系。这些实体类通常包含一些属性(成员变量)和方法,用于描述表中的各个字段以及与其他表之间的关联关系。
两者的区别在于,`java.lang`包中的类是Java语言提供的基础类型,包括基本数据类型(如int、double等)和一些常用的引用类型(如String、Object等)。而新建的实体类是根据业务需求自定义的类型,用于表示特定的业务实体。
在Java程序中,我们通常会使用`java.lang`包中的类,如String、Integer等。而实体类则是根据具体的业务需求定义的,通常需要我们自己来编写和维护。
相关问题
使用freemarker,根据表自动生成实体类、指令、Controller、Service、Dao、html
您可以使用FreeMarker作为模板引擎,通过编写模板来自动生成所需的实体类、指令、Controller、Service、Dao和HTML等文件。以下是一些示例模板以供参考:
实体类模板:
```java
package ${basePackage}.entity;
import lombok.Data;
@Data
public class ${className} {
<#list properties as prop>
/**
* ${prop.comment}
*/
private ${prop.type} ${prop.name};
</#list>
}
```
指令模板:
```java
package ${basePackage}.command;
import lombok.Data;
@Data
public class ${className}Command {
<#list properties as prop>
/**
* ${prop.comment}
*/
private ${prop.type} ${prop.name};
</#list>
}
```
Controller模板:
```java
package ${basePackage}.controller;
import ${basePackage}.command.${className}Command;
import ${basePackage}.entity.${className};
import ${basePackage}.service.${className}Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/${classPath}")
public class ${className}Controller {
@Autowired
private ${className}Service ${className?uncap_first}Service;
@PostMapping
public ${className} create(@RequestBody ${className}Command ${className?uncap_first}Command) {
return ${className?uncap_first}Service.create(${className?uncap_first}Command);
}
@GetMapping("/{id}")
public ${className} getById(@PathVariable Long id) {
return ${className?uncap_first}Service.getById(id);
}
@PutMapping("/{id}")
public ${className} updateById(@PathVariable Long id, @RequestBody ${className}Command ${className?uncap_first}Command) {
return ${className?uncap_first}Service.updateById(id, ${className?uncap_first}Command);
}
@DeleteMapping("/{id}")
public void deleteById(@PathVariable Long id) {
${className?uncap_first}Service.deleteById(id);
}
}
```
Service模板:
```java
package ${basePackage}.service;
import ${basePackage}.command.${className}Command;
import ${basePackage}.entity.${className};
import ${basePackage}.dao.${className}Dao;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ${className}Service {
@Autowired
private ${className}Dao ${className?uncap_first}Dao;
public ${className} create(${className}Command ${className?uncap_first}Command) {
${className} ${className?uncap_first} = new ${className}();
BeanUtils.copyProperties(${className?uncap_first}Command, ${className?uncap_first});
return ${className?uncap_first}Dao.save(${className?uncap_first});
}
public ${className} getById(Long id) {
return ${className?uncap_first}Dao.getById(id);
}
public ${className} updateById(Long id, ${className}Command ${className?uncap_first}Command) {
${className} ${className?uncap_first} = ${className?uncap_first}Dao.getById(id);
BeanUtils.copyProperties(${className?uncap_first}Command, ${className?uncap_first});
return ${className?uncap_first}Dao.save(${className?uncap_first});
}
public void deleteById(Long id) {
${className?uncap_first}Dao.deleteById(id);
}
}
```
Dao模板:
```java
package ${basePackage}.dao;
import ${basePackage}.entity.${className};
import org.springframework.data.jpa.repository.JpaRepository;
public interface ${className}Dao extends JpaRepository<${className}, Long> {
}
```
HTML模板:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${className}列表</title>
</head>
<body>
<h1>${className}列表</h1>
<table>
<thead>
<tr>
<th>ID</th>
<#list properties as prop>
<th>${prop.comment}</th>
</#list>
<th>操作</th>
</tr>
</thead>
<tbody>
<#list dataList as data>
<tr>
<td>${data.id}</td>
<#list properties as prop>
<td>${data[prop.name]}</td>
</#list>
<td>
<a href="/${classPath}/${data.id}">详情</a>
<a href="/${classPath}/${data.id}/edit">编辑</a>
<a href="/${classPath}/${data.id}?_method=DELETE">删除</a>
</td>
</tr>
</#list>
</tbody>
</table>
<a href="/${classPath}/new">新建${className}</a>
</body>
</html>
```
以上仅是模板的示例,您可以根据自己的需求进行修改和扩展。使用FreeMarker生成文件的具体步骤如下:
1. 定义模板文件,可以使用FreeMarker的语法编写模板;
2. 定义模板数据,可以是Java对象或者Map等;
3. 使用FreeMarker的Template类加载模板文件,得到Template对象;
4. 创建Writer对象,将渲染后的模板内容输出到文件中。
以下是一个示例代码,用于生成实体类文件:
```java
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class EntityGenerator {
public static void generate(String basePackage, String className, Map<String, Object> properties) throws IOException, TemplateException {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
cfg.setClassLoaderForTemplateLoading(EntityGenerator.class.getClassLoader(), "templates");
cfg.setDefaultEncoding("UTF-8");
Template template = cfg.getTemplate("entity.ftl");
Map<String, Object> data = new HashMap<>();
data.put("basePackage", basePackage);
data.put("className", className);
data.put("properties", properties);
File file = new File(String.format("%s/src/main/java/%s/entity/%s.java", System.getProperty("user.dir"), basePackage.replaceAll("\\.", "/"), className));
FileWriter writer = new FileWriter(file);
template.process(data, writer);
writer.close();
System.out.println(String.format("Entity generated: %s", file.getAbsolutePath()));
}
}
```
使用方式示例:
```java
Map<String, Object> properties = new HashMap<>();
properties.put("id", new Property("Long", "ID"));
properties.put("name", new Property("String", "名称"));
properties.put("age", new Property("Integer", "年龄"));
EntityGenerator.generate("com.example.demo", "User", properties);
```
这段代码将会生成一个名为User.java的实体类文件,包含id、name和age三个属性。
mybatis如何映射下面的实体类 public class EquipmentVo extends RegionalEquipment { private List<EquipmentDataVo> equipmentDataVoList; private List<Map> maps; public List<Map> getMaps() { return maps; } public void setMaps(List<Map> maps) { this.maps = maps; } public List<EquipmentDataVo> getEquipmentDataVoList() { return equipmentDataVoList; } public void setEquipmentDataVoList(List<EquipmentDataVo> equipmentDataVoList) { this.equipmentDataVoList = equipmentDataVoList; } }
在 MyBatis 中映射这个实体类,可以新建一个对应的映射文件,并在该文件中编写 SQL 语句和相应的映射规则。以下是一个映射文件的示例:
```
<resultMap id="equipmentVoMap" type="com.example.EquipmentVo">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="equipmentDataVoList" column="id" javaType="java.lang.Integer" select="com.example.EquipmentDataMapper.selectByEquipmentId"/>
<result property="maps" column="id" javaType="java.lang.Integer" select="com.example.MapMapper.selectByEquipmentId"/>
</resultMap>
<select id="selectById" resultMap="equipmentVoMap">
SELECT id, name, create_time, update_time
FROM equipment
WHERE id = #{id}
</select>
```
在上面的示例中,`resultMap` 标签定义了一个结果映射,其中使用了 `<result>` 标签将查询结果的列映射到实体类的属性上。其中 `equipmentDataVoList` 属性和 `maps` 属性的值需要通过另外的 SQL 语句进行查询,所以在 `<result>` 标签中使用了 `select` 属性来指定查询的 SQL 语句和对应的 Mapper 接口方法。在实现这些 Mapper 接口方法时,需要通过 MyBatis 的动态 SQL 语句来拼接查询条件,以保证查询的准确性。
阅读全文