# cjxyorm
**Repository Path**: 86zhangdong/CJXYORM
## Basic Information
- **Project Name**: cjxyorm
- **Description**: 如果你厌倦了繁琐的JDBC,阿帕奇的DBUtils又满足不了你的需求,mybaits、hibernate却又太过于庞大,那么就请使用cjxyorm吧,它吸收了DBUtils和Hibernate的特点,简单易用没有任何多余功能。轻轻松松的进行CRUD。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 11
- **Created**: 2021-01-21
- **Last Updated**: 2021-01-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# _**中文教程**_ :tw-1f34b:
# CJXYORM
如果你厌倦了繁琐的JDBC,Apache的DBUtils又满足不了你的需求,mybaits、hibernate却又太过于庞大,那么就请使用cjxyorm吧,它吸收了DBUtils和Hibernate的特点,简单易用没有任何多余功能。轻轻松松的进行CRUD。
# **入门demo**
准备工作:在工程中添加全部的jar包
第一步:配置相关配置
把c3p0-config.xml、cjxy-orm.xml放到编译路径下
c3p0文件内容:
```
root
***********
com.mysql.jdbc.Driver
```
cjxy-orm.xml内容如下
```
true
true
mysql
```
第二步:新建一个DBUtils.java的工具类
```
import cn.cjxy.orm.main.QuerySession;
import cn.cjxy.orm.main.SessionFactory;
public class DBUtils{
public static QuerySession getQuerySession(){
return new SessionFactory().openQuerySession();
}
}
```
第三步:新建一个实体类User.java
```
import cn.cjxy.orm.anntaion.Enitry;
import cn.cjxy.orm.anntaion.GeneratedValue;
import cn.cjxy.orm.anntaion.Id;
import cn.cjxy.orm.anntaion.Table;
import cn.cjxy.orm.constant.ORMConfig;
@Enitry
@Table(name = "user")
public class User {
@Id
@GeneratedValue(startegy = ORMConfig.IDENTITY)
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
```
第四步:新建一个测试类Test.java
```
public class Test{
@Test
public void testSessionFactory(){
User user=new User();
user.setName("jiangfan");
user.setPassword("123456");
DBUtils.getQuerySession().save(user);
}
}
```
### 如果您的配置没有问题的话,您的数据库中会生成一张表和一条记录。
# cjxyorm注解详解
### @Enitry
#### 这个注解用来修饰一个实体类,如果一个类被此注解修饰。则这个类会被cjxyorm识别。然后读取此类的的详细信息,然后生成一张表。如果您想要这个类就必须加上此注解
```
@Enitry
public class User
{
}
```
### @Table(name="table_name")
#### 这个注解同样也是用来修饰一个实体类,这个注解用来指定生成数据表的名字。这个注解并不是必须的,如果您不使用此注解,则默认会使用类的名字作为数据表的名字。
```
@Enitry
@Table(name= "my_user")
public class User
{
}
```
### @Id、 @GeneratedValue
#### @Id 注解用来修饰类当中的属性,这个注解是用来指定生成数据表的字段的主键,被修饰的属性必须是Integer且名字为id。否则cjxyorm将不能正常 运行。@Id注解还需要配合 @GeneratedValue注解才会起作用。@GeneratedValue注解里面有一个startegy属性,startegy用来指定主键的生成策略。
#### ORMConfig.IDENTITY指定策略为id自增。
```
@Enitry
@Table(name= "my_user")
public class User
{
@Id
@GeneratedValue(startegy = ORMConfig.IDENTITY) //抱歉目前cjxyorm只支持自增一种生成策略
private Integer id;
// ..... setter/getter
}
```
### @Column
#### @Column注解用来修饰类中的属性。它里面有这些属性:length、name、nullable、unique、type length属性用来指定生成数据表字段的长度,name用来指定生成数据表字段的名字,nullable指定生成数据表字段是否为空(默认为空),unique用来指定数据表字段是否是唯一的(默认是不唯一),type用来指定数据表字段的类型(默认为varchar(255))。此注解也不是必须的,如果您不使用此注解,那么没有被此注解修饰的属性将将会根据自己的名字生成一个字段且类型为varchar长度为255。
```
@Enitry
@Table(name= "my_user")
public class User
{
@Id
@GeneratedValue(startegy = ORMConfig.IDENTITY) //抱歉目前cjxyorm只支持自增一种生成策略
private Integer id;
@Column(name="USER_NAME",type = "varchar",length = "50",unique = true,nullable = true)
private String username;
private String password;
// ..... setter/getter
}
```
# cjxyorm SessionFactory类详解
### SessionFactory
#### 创建SessionFactory的实例我们可以调用这个类中的 openSession()方法和openQuerySession()方法,这个两个方法分别返回 Session的实例和
#### QuerySession的实例,本人推荐大家使用QuerySession,因为它对Session进行了扩展。下面我们定义一个工具类来演示如何调用SessionFactory中的两个方法
```
public class DBUtils {
private static SessionFactory sessionFactory=new SessionFactory();
public static Session getSession(){
return sessionFactory.openSession();
}
public static QuerySession getQuerySession(){
return sessionFactory.openQuerySession();
}
}
```
### QuerySession
#### 我在QuerySession定义了一系类CRUD的方法,下面我将介绍一些比较常用的方法。
#### public Object save(Object t):这个方法需要一个传入一个Object类型的对象,cjxyorm会通过反射机制获取这个对象中set的属性值,然后拼接成一条sql语句,并持久化到数据库中。
```
public class Hello {
public static void main(String[] args) {
User user=new User();
user.setUsername("张三");
user.setPassword("123456");
DBUtils.getSession().save(user);
}
}
```
#### public T get(Serializable id, Class clazz):这个方法需要传入两个参数,第一个是序列化id,第二个是带泛型Class对象,cjxyorm会先去寻找传入Class对象中的 @Table注解,如果这个注解存在就根据这个注解指定名字和传入的序列化id生成一条查询语句,并且将结果封装到Class对象中并返回。如果@Table注解不存在就根据类名和传入的序列化id来生成查询语句,然后和上面一样封装结果,并返回。
```
public class Hello {
public static void main(String[] args) {
System.out.println(DBUtils.getSession().get(1,User.class));//在user中查找id为1的记录。
}
}
```
#### public void delete(Serializable id, Class clazz):这个方法和上面的get方法用法一样,唯一不同的是上面的方法是从表中取一条指定记录,而这个方法是从表删除指定的一条的记录。
```
public class Hello {
public static void main(String[] args) {
DBUtils.getSession().delete(1,User.class);//在user中删除id为1的记录
}
}
```
#### public void update(Serializable id, Object obj):这个方法需要传入两个参数,第一个是序列化id,第二个是Object的实例,cjxyorm会通过反射机制获取传入obj对象中set的属性值,然后根据根据传入的序列化id 来生成一条UPDATE语句。
```
public class Hello {
public static void main(String[] args) {
User user=new User();
user.setUsername("姜小白");
user.setPassword("1314520");
BUtils.getSession().save(user);//插入一条记录
System.out.println( BUtils.getSession().get(2,User.class));//查询刚才保存的记录
user.setUsername("江小白");//修改username
DBUtils.getSession().update(2,user);//执行修改
System.out.println( BUtils.getSession().get(2,User.class));//在这里会显示你修改之后的结果
}
}
```
#### T queryOne(String sql, Class type, Object[] parames):这个方法需要传入三个参数,第一个是您的查询sql,第二个是你要将查询的结果封装的类型,第三个是查询参数。
```
public class Hello {
public static void main(String[] args) {
String sql="SELECT * FROM my_my_user WHERE USER_NAME=? AND password=?";
Object[] objs=new Object[]{"江小白",1314520};
User result=DBUtils.getQuerySession().queryOne(sql,User.class,objs);
System.out.println(result);
}
}
```
#### Set