User.java
package com.zhiguo.model;
import com.jfinal.plugin.activerecord.Model;
public class User extends Model<User> {
private static final long serialVersionUID = 7571249742238755747L;
public static final User dao = new User();
}
Config.Util
package com.zhiguo.util;
import com.jfinal.kit.PropKit;
public class ConfigUtil {
public static String url;
public static String username;
public static String password;
static {
PropKit.use("config.txt");
url = PropKit.get("url");
username = PropKit.get("username");
password = PropKit.get("password");
}
}
CrudUtil.java
package com.zhiguo.util;
import org.apache.log4j.Logger;
import com.jfinal.kit.PathKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.druid.DruidPlugin;
import com.zhiguo.model.User;
public class CrudUtil {
private static final Logger LOGGER = Logger.getLogger(CrudUtil.class);
static {
DruidPlugin druidPlugin = new DruidPlugin(ConfigUtil.url, ConfigUtil.username, ConfigUtil.password);
ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
activeRecordPlugin.setBaseSqlTemplatePath(PathKit.getWebRootPath() + "/src/main/webapp/WEB-INF/sql/");
activeRecordPlugin.addSqlTemplate("t_user.sql");
activeRecordPlugin.setContainerFactory(new CaseInsensitiveContainerFactory(true));
activeRecordPlugin.addMapping("t_user", User.class);
druidPlugin.start();
activeRecordPlugin.start();
}
public static void init() {
LOGGER.info("CrudUtil init()...");
}
}
config.txt
url = jdbc:mysql://localhost:3306/jfinal??useUnicode=true&characterEncoding=UTF-8
username = root
password = root
jfinal.sql
/*
Navicat MySQL Data Transfer
Source Server : localhost_3306_root
Source Server Version : 50544
Source Host : localhost:3306
Source Database : jfinal
Target Server Type : MYSQL
Target Server Version : 50544
File Encoding : 65001
Date: 2018-09-13 15:52:39
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`ID` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`USERNAME` varchar(255) DEFAULT NULL,
`PASSWORD` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('0000000001', '张三', '111111');
INSERT INTO `t_user` VALUES ('0000000002', '李四', '222222');
INSERT INTO `t_user` VALUES ('0000000003', '王五', '333333');
INSERT INTO `t_user` VALUES ('0000000004', '赵六', '444444');
log4j.properties
log4j.rootLogger=debug, stdout, debug, info, error
# Console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
#log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss } [%t] %5p %c{1}:%L - %m%n
DBCrud.java
package com.zhiguo.crud.test;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.zhiguo.model.User;
import com.zhiguo.util.CrudUtil;
public class DBCrud {
private static final Logger LOGGER = Logger.getLogger(DBCrud.class);
static {
CrudUtil.init();
}
@Test
public void findTemplate() {
List<Record> records = Db.find(Db.getSql("t_user.findAll"));
LOGGER.info(records);
records = Db.find(Db.getSql("t_user.findByIndex"), 2, 4);
LOGGER.info(records);
Kv kv = Kv.by("min", 2).set("max", 4);
records = Db.find(Db.getSqlPara("t_user.findByPara", kv));
LOGGER.info(records);
System.out.println("----------------------------------------------");
List<User> users = User.dao.find(User.dao.getSql("t_user.findAll"));
LOGGER.info(users);
users = User.dao.find(User.dao.getSql("t_user.findByIndex"), 2, 4);
LOGGER.info(users);
users = User.dao.find(User.dao.getSqlPara("t_user.findByPara", kv));
LOGGER.info(users);
}
// @Test
public void batchSave() {
List<User> users = getUserList();
LOGGER.info(Arrays.toString(Db.batchSave(users, users.size())));
List<Record> records = getRecordList();
LOGGER.info(Arrays.toString(Db.batchSave("t_user", records, records.size())));
}
// @Test
public void batchUpdate() {
List<User> users = getUserList();
LOGGER.info(Arrays.toString(Db.batchUpdate(users, users.size())));
List<Record> records = getRecordList();
LOGGER.info(Arrays.toString(Db.batchUpdate("t_user", records, records.size())));
}
private List<User> getUserList() {
List<User> users = new ArrayList<>();
User user1 = new User();
user1.set("id", 6);
user1.set("username", "zhangsan");
user1.set("password", "11111111.");
users.add(user1);
User user2 = new User();
user2.set("id", 7);
user2.set("username", "lisi");
user2.set("password", "11111111.");
users.add(user2);
return users;
}
private List<Record> getRecordList() {
List<Record> records = new ArrayList<>();
Record record1 = new Record();
record1.set("id", 8);
record1.set("username", "zhangsan");
record1.set("password", "123456789.");
records.add(record1);
Record record2 = new Record();
record2.set("id", 9);
record2.set("username", "lisi");
record2.set("password", "123456789.");
records.add(record2);
return records;
}
// @Test
public void find() {
List<Record> records = Db.find("select * from t_user");
LOGGER.info(records);
records = Db.find("select * from t_user where id > ? and id < ?", 2, 4);
LOGGER.info(records);
}
// @Test
public void findFirst() {
Record record = Db.findFirst("select * from t_user");
LOGGER.info(record);
record = Db.findFirst("select * from t_user where id > ? and id < ?", 2, 4);
LOGGER.info(record);
}
// @Test
public void findById() {
Record record = Db.findById("t_user", 1);
LOGGER.info(record);
// Find model by composite id values.
// record =Db.findById("t_user", "id, code", 1,2);
// LOGGER.info(record);
}
// @Test
public void save() {
Record record = new Record();
record.set("id", 5);
record.set("username", "zhangsan");
record.set("password", "zhangsan");
LOGGER.info(Db.save("t_user", record));
}
// @Test
public void update() {
// Db.update("update t_user set username=zhang3 where id = 5");
// Db.update("update t_user set username=zhang3 where id = ?", 5);
Record record = Db.findById("t_user", 5);
record.set("username", "zhang3");
LOGGER.info(Db.update("t_user", record));
// LOGGER.info(Db.update("t_user", "id, code",record));
}
// @Test
public void paginate() {
Page<Record> recordPage = Db.paginate(2, 2, "select * ", "from t_user");
LOGGER.info(JSON.toJSON(recordPage));
LOGGER.info(recordPage.getList());
recordPage = Db.paginate(2, 2, "select * ", "from t_user where id > ? and id < ?", 1, 5);
LOGGER.info(JSON.toJSON(recordPage));
LOGGER.info(recordPage.getList());
}
// @Test
public void delete() {// 4种方式
// Db.delete("delete from t_user where id = 5");
// Db.delete("delete from t_user where id = ?", 5);
Record record = Db.findById("t_user", 5);
LOGGER.info(record);
LOGGER.info(Db.delete("t_user", record));
// LOGGER.info(Db.delete("t_user", "id, code", record));
}
// @Test
public void deleteById() {
LOGGER.info(Db.deleteById("t_user", 5));
// Delete model by composite id values.
// Db.deleteById("t_user", "id, code", 1,2);
}
// @Test
public void tx() {
Db.tx(new IAtom() {
@Override
public boolean run() throws SQLException {
save();
save();
return true;
}
});
}
}
ModelCrud.java
package com.zhiguo.crud.test;
import java.sql.SQLException;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;
import com.jfinal.plugin.activerecord.Page;
import com.zhiguo.model.User;
import com.zhiguo.util.CrudUtil;
public class ModelCrud {
private static final Logger LOGGER = Logger.getLogger(ModelCrud.class);
static {
CrudUtil.init();
}
@Test
public void findTemplate() {
List<User> users = User.dao.find(User.dao.getSql("t_user.findAll"));
LOGGER.info(users);
users = User.dao.find(User.dao.getSql("t_user.findByIndex"), 2, 4);
LOGGER.info(users);
Kv kv = Kv.by("min", 2).set("max", 4);
users = User.dao.find(User.dao.getSqlPara("t_user.findByPara", kv));
LOGGER.info(users);
System.out.println("----------------------------------------------");
users = User.dao.find(Db.getSql("t_user.findAll"));
LOGGER.info(users);
users = User.dao.find(Db.getSql("t_user.findByIndex"), 2, 4);
LOGGER.info(users);
users = User.dao.find(Db.getSqlPara("t_user.findByPara", kv));
LOGGER.info(users);
}
// @Test
public void find() {
List<User> users = User.dao.find("select * from t_user");
LOGGER.info(users);
users = User.dao.find("select * from t_user where id > ? and id < ?", 2, 4);
LOGGER.info(users);
}
// @Test
public void findFirst() {
User user = User.dao.findFirst("select * from t_user");
LOGGER.info(user);
user = User.dao.findFirst("select * from t_user where id > ? and id < ?", 2, 4);
LOGGER.info(user);
}
// @Test
public void findById() {
User user = User.dao.findById(1);
LOGGER.info(user);
// Find model by composite id values.
// user = User.dao.findById(1, 1);
// LOGGER.info(user);
}
// @Test
public void save() {
User user = new User();
user.set("id", 5);
user.set("username", "zhangsan");
user.set("password", "zhangsan");
LOGGER.info(user.save());
}
// @Test
public void update() {
User user = User.dao.findById(5);
user.set("username", "zhang3");
LOGGER.info(user.update());
}
// @Test
public void paginate() {
Page<User> userPage = User.dao.paginate(2, 2, "select * ", "from t_user");
LOGGER.info(JSON.toJSON(userPage));
LOGGER.info(userPage.getList());
userPage = User.dao.paginate(2, 2, "select * ", "from t_user where id > ? and id < ?", 1, 5);
LOGGER.info(JSON.toJSON(userPage));
LOGGER.info(userPage.getList());
}
// @Test
public void delete() {// 1种方式
User user = User.dao.findById(5);
LOGGER.info(user);
LOGGER.info(user.delete());
}
// @Test
public void deleteById() {
LOGGER.info(User.dao.deleteById(5));
// Delete model by composite id values.
// User.dao.deleteById(1, 2);
}
// @Test
public void tx() {
Db.tx(new IAtom() {
@Override
public boolean run() throws SQLException {
save();
save();
return true;
}
});
}
}
t_user.sql
#namespace("t_user")
#sql("findAll")
select * from t_user order by id desc
#end
#sql("findByIndex")
select * from t_user where id > ? and id < ?
#end
#sql("findByPara")
select * from t_user where id > #para(min) and id < #para(max)
#end
#end
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zhiguo</groupId>
<artifactId>maven-jfinal</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>maven-jfinal Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal-java8</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<build>
<finalName>maven-jfinal</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- java8 保留参数名编译参数 -->
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass></mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>