个人知乎
基础三-数据库基础
业务字段设计
业务设计->数据表->表间关系
做一些冗余来加快查询
数据库创建
MySQL Workbench:本地调试界面工具,复制SQL语句
服务器上:拷贝SQL语句
CRUD操作
INSERT:
insert into Table values(..);
insert into Table select..
SELECT:
select .. from Table where ...
UPDATE:
update Table set ..=.. where ...
DELETE:
delete from Table where...
MyBatis集成
JDBC:早期操作数据库的方式,需要加载连接等操作
框架:只需要关心sql逻辑部分
配置文件:maven项目在pom.xml导入sql驱动包,mybatis包
properties配置和数据库关联,账号密码,注意root账号,密码为空
mybatis配置连接时长,ORM驼峰自动转换等
DAO:数据库操作接口,自定义接口来操纵数据库,封装sql语句,注意目录层次,DAO层 一定要在启动类所在目录下面
注解和XML控制sql查询
注解:
控制简单sql语句
@Mapper注解会自动让mybatis实现接口
@Mapper
public interface UserDAO {
@Insert ({"insert into " , TABLE_NAME, "(" , INSERT_FIELDS,
") values (#{name},#{password},#{salt},#{headUrl})" })
public abstract int addUser (User user);
@Select ({"select " , SELECT_FIELDS, " from " , TABLE_NAME, " where id=#{id}" })
public abstract User selectById (int id);
@Update ({"update " , TABLE_NAME, " set password=#{password} where id=#{id}" })
public abstract void updatePassword (User user);
@Delete ({"delete from " , TABLE_NAME, " where id=#{id}" })
public abstract void deleteById (int id);
}
xml配置:
在resources下创建和DAO相同目录,创建与DAO.java同名.xml
利用xml实现复杂的sql语句:根据参数做分支逻辑等
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace ="com.nowcoder.dao.QuestionDAO" >
<sql id ="table" > question</sql >
<sql id ="selectFields" > id, title, content, comment_count,created_date,user_id
</sql >
<select id ="selectLatestQuestions" resultType ="com.nowcoder.model.Question" >
SELECT
<include refid ="selectFields" />
FROM
<include refid ="table" />
<if test ="userId != 0" >
WHERE user_id = #{userId}
</if >
ORDER BY id DESC
LIMIT #{offset},#{limit}
</select >
</mapper >
ViewObject
每个VO打包多个相关对象,如User,Question等
一个VO序列传递给html,做页面渲染
public class ViewObject {
private Map<String, Object> objs = new HashMap<String, Object>();
public void set (String key, Object value) {
objs.put(key, value);
}
public Object get (String key) {
return objs.get(key);
}
}
freemarker模板
.ftl格式文件
ftl语法
日期格式化:
date: 只显示日期,不显示时间.
如${createTime?date} 或${createTime?date('yyyy-MM-dd')}
time: 只显示时间,不显示日期
如${createTime?time} 或${createTime?time('hh:mm:ss')}
datetime: 时间和日期同时显示
如${createTime} 或${createTime?datetime('yyyy-MM-dd hh:mm:ss')}或${createTime?string('yyyy-MM-dd hh:mm:ss')}
首页开发
复杂页面拆分
数据显示
velocity语句传递ViewObject对象,显示在html